对Swift中类的Failable Initializers的澄清

时间:2015-07-28 05:05:52

标签: ios swift initialization

在结构中,在将属性设置为初始值之前触发初始化失败。

但是,在类中,在设置了所有属性并进行委派之后会触发失败。那是为什么?

为什么结构和类都无法在初始化过程的最后触发初始化失败?

更新

以下是Apple Swift文档中的示例代码:

在以下结构示例中,在初始化任何属性之前触发初始化失败:

struct Animal {
    let species: String
    init?(species: String) {
        if species.isEmpty { return nil }
        self.species = species
    }
}

在以下示例中,在设置属性后触发初始化失败:

class Product {
    let name: String!
    init?(name: String) {
        self.name = name
        if name.isEmpty { return nil }
    }
}

文档继续说明:

  

但是,对于类,可用的初始值设定项只能在之后触发初始化失败该类引入的所有存储属性都已设置为初始值并且已发生任何初始化程序委派。

为什么在类中,只有在所有属性都设置为初始值(并且发生委托)后才会发生初始化失败?

1 个答案:

答案 0 :(得分:1)

如@mustafa在this帖子所述:

  

根据Chris Lattner的说法,这是一个错误。以下是他所说的:

     
    

这是swift 1.1编译器的一个实现限制,     在发行说明中记录。编译器目前无法     在所有情况下都会破坏部分初始化的类,所以它不允许     形成必须的情况。我们认为这是一个     在将来的版本中修复bug,而不是功能。

  
     

Source