Swift:打开选项变量的方式不同

Swift:打开选项变量的方式不同,swift,Swift,有人能解释这两种展开变量的方法之间的区别吗: 第1版: let myVariable : String? = "my name" let myNameVariable : String = myVariable! 第2版: let myVariable : String? = "my name" let myNameVariable : String! = myVariable 如果有人能解释一下这两种展开变量的方法之间的区别,我将不胜感激 let myVariable : String

有人能解释这两种展开变量的方法之间的区别吗:

第1版:

let myVariable : String? = "my name"

let myNameVariable : String = myVariable!
第2版:

let myVariable : String? = "my name"

let myNameVariable : String! = myVariable
如果有人能解释一下这两种展开变量的方法之间的区别,我将不胜感激

let myVariable : String? = "my name"

let myNameVariable : String = myVariable!
这称为展开,从可选类型展开。 所以这里myNameVariable的类型是String

关于版本2

let myVariable : String? = "my name"

let myNameVariable : String! = myVariable
我不认为这是展开,而是类型转换, 所以这里myNameVariable的类型是字符串

 let myNameVariable = myVariable as String!
更新: 主要区别

例1

let myVariable : String? = "my name"

var myNameVariable = myVariable!

//myNameVariable = nil //Error

var implUnwrapVar:String! = myVariable

implUnwrapVar = nil//OK
例2

let myVariable : String? = nil

//var myNameVariable = myVariable! //error

var implUnwrapVar:String! = myVariable // ok

如果
myVariable
nil
,则当您使用
myVariable强制展开时,版本1将崩溃myNameVariable
时,code>和版本2将崩溃。根据apple文档:let assumedString:String!=“隐式展开的可选字符串。”。隐式unwrapped意味着您可以将其用作unwrapped。但是,请注意,您应该小心,因为如果它是
var
,它可以为零。在第一种情况下,如何调用?请参阅更新代码,我认为这是主要区别。