![](/img/trans.png)
[英]What is the difference between [[String:String]]! and [[String:String]]() in Swift
[英]What is the difference between 2 strings initialization in Swift `=String()` and `: String!`
字串1:
var string1=String()
字串2:
var editTag: String!
最上面的一个声明并创建String
一个实例。
底部声明了一个隐式展开的可选变量,该变量可以容纳String
但不创建String
的实例。
由于底部是可选的,因此在包含该类的实例之前,其值为nil
。 通过用!
隐式展开它!
您保证它会被一个实例填充,通常在init函数或类似的函数中。 因此,在使用前无需检查它是否已装满或拆开。
第一行声明一个字符串变量,并用一个空字符串初始化它。
第二行还声明了一个字符串变量,但在这种情况下,它是一个隐式展开的变量。 在这一点上,该变量实际上并未初始化,并且任何对其进行访问的尝试都会产生“意外发现nil”异常。
以这种方式声明变量可以使您不必在初始化函数中初始化变量(通常必须这样做)。 当您要在诸如viewDidLoad
的函数中初始化变量或从另一个视图控制器的prepareForSegue
方法提供值时,可以使用此方法。
第一个将为字符串创建一个实例,如目标c中的alloc init。 第二个将声明字符串的未包装版本,但是该字符串将没有实例,并且在此字符串中没有值时访问此变量,它将崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.