我对Swift Wrap和Unwrap有点困惑!所以我们说这是我的代码:
var name:String? = "FirstName"
print(name)
Run Code Online (Sandbox Code Playgroud)
打印功能是否自动解包可选的名称?所以我不需要说
print(name!)以打开这个名字?我想我想要了解的是这两个是否相当于解开一个可选变量?
print("name") 就像说 print ("name"!)
我的另一个问题是关于零.说的var name:String? = "FirstName"相当于说var name:String? = nil.那么赋值是否包含变量?
什么东西可以是零,它可以是两件事,它可以是Some(给定类型的值)或者它可以是nil.
宣布这样的事情:
var name: String?
Run Code Online (Sandbox Code Playgroud)
意味着name变量可以为nil,如果为其赋值,则需要将其展开以使用它.
name = "FirstName"
Run Code Online (Sandbox Code Playgroud)
现在已经定义了name变量,但是在某些情况下你还需要确保它不是nil,但在其他情况下(例如当字符串不需要为nil时)使用可选的链接.
可选链接允许在整个陈述中连续评估零或一些,只要不要求不是零.如果是这种情况,那么您需要打开它:
let someThingRequiresAString = NeedAStringInitializer(string: name!)
Run Code Online (Sandbox Code Playgroud)
在上面的语句中,如果name为nil,程序将崩溃,有几种方法可以处理这样的事情,这是一个简单的例子:
if name != nil {
let someThingRequiresAString = NeedAStringInitializers(string: name!)
}
Run Code Online (Sandbox Code Playgroud)
在这里你知道你可以这样做b/c名称已被评估为不是零.您还可以使用零合并运算符或保护语句.这是Swift中nil合并的一个简单例子:
let someThingRequiresAString = NeedAStringInit(string: name ?? "New Name")
Run Code Online (Sandbox Code Playgroud)
可选范式非常强大且富有表现力.
| 归档时间: |
|
| 查看次数: |
7282 次 |
| 最近记录: |