这个名字!总是让我感到困惑:它被称为'隐式解包的可选'.但是,隐含的是什么呢?隐含意味着"隐含但不明白".但是,没有!明确表达其目的吗?不添加!明确表达我们想要实现的目标吗?
dre*_*wag 25
在Swift中,尾随感叹号(!)以两种不同的方式使用.一种叫做强制解缠.这是当你有一个变量被定义为Optional并且你想要基本断言该值不是nil时你可以使用它,好像它不是可选的:
var optionalName: String? = "World"
if optionalName != nil {
sayHelloTo(optionalString!)
}
Run Code Online (Sandbox Code Playgroud)
另一种可以描述"强制解包"的方法是"显式展开",但如果你试图"强制解包"一个nil的可选项,强制会增加整个程序崩溃的额外提示.
第二种是当你实际声明变量的类型时,它被称为隐式解包可选.这适用于您希望声明技术上可选的变量,但您会将其视为不可选的变量.每次你使用这个Implicitly Unwrapped Optional,它实际上是在做我上面描述的"Force Unwrapping":
var name: String! = "World"
if name != nil {
sayHelloTo(name)
}
Run Code Online (Sandbox Code Playgroud)
你仍然可以测试一个隐式解包的可选项为nil,但你也可以直接使用它,就像它不是可选的一样.这就是为什么它被认为是隐含的.每次使用它时,都会自动为您隐式解开.
就像"Forced Unwrapping"一样,如果你尝试使用它时,"Implicitly Unwrapped Optional"仍会使整个程序崩溃
普通可选
var foo : Foo? = Foo()
foo!.doSomething() // explicitly unwrap it and call the method
Run Code Online (Sandbox Code Playgroud)
隐式解包可选
var foo : Foo! = Foo()
foo.doSomething() // implicitly unwrap it and call the method just like it is not optional
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,您都需要声明一个可选的(?或!).Implicitly Unwrapped Optional不会添加更多内容.但是在使用它时可以省略解包操作符.
| 归档时间: |
|
| 查看次数: |
3720 次 |
| 最近记录: |