Swift` = String()`和`:String!`中的2个字符串初始化有什么区别?

时间:2016-02-08 11:14:41

标签: ios iphone swift

字符串1:

twttr.ready(function (twttr) {
    twttr.events.bind(
    'rendered',
    function (ev) {
      // callback code
    });
});

字符串2:

var string1=String()

3 个答案:

答案 0 :(得分:4)

顶部声明并创建String的实例。

底部声明一个隐式展开的可选变量,它可以包含String但不会创建String的实例。

因为底部是可选的,所以它的值为nil,直到它包含该类的实例。通过使用!隐式地展开它,您可以承诺它将填充一个实例,通常在init函数或类似函数中。因此,在使用之前无需检查它是否已填充或打开。

答案 1 :(得分:0)

第一行声明一个字符串变量并用空字符串初始化它。

第二行也声明了一个字符串变量,但在这种情况下它是一个隐式展开的变量。此时变量实际上没有初始化,任何访问它的尝试都会产生“意外发现的零”异常。

以这种方式声明变量允许您不初始化初始化函数中的变量(通常您必须这样做)。当您要在viewDidLoad等函数中初始化变量或从另一个视图控制器的prepareForSegue方法提供值时,可以使用此方法。

答案 2 :(得分:0)

第一个将为string创建一个n实例,就像在目标c中的alloc init一样。 第二个将声明字符串的解包版本但是没有此字符串的实例并且当此字符串中没有值时访问此变量,它将崩溃。