swift 。不再需要初始化?

标签 swift syntax initialization

在 swift 中,不再需要像下面这样的初始化,对吧?关于这个话题有很多讨论,但似乎没有明确的答案。提前致谢!!

- (instancetype)init {
    if (self = [super init]) {

    }
    return self;
}

最佳答案

正确——有点。

如果您正在为一个类实现无参数初始化程序,并且它是该类的指定初始化程序(您没有将其声明为convenience init),那么不仅不需要调用 super 和/或分配给 self,您不能。初始化链是由语言强制执行的,因此它会为您完成不需要执行的部分。

如果您要子类化,则您实现的任何初始化程序都必须委托(delegate)给父类(super class)的委托(delegate)初始化程序。但你不分配给 self,你只需调用 super.init(/*whatever*/) — 在类初始化期间,self 的身份code> 是固定的,不能更改。 (否则父类(super class)的状态可能未初始化。)

因为初始化器不是 Swift 中的函数/方法,所以它们没有返回值,因此末尾也没有 return self 。同样,该语言会为您完成所需的部分(创建类的实例)——在初始化程序中,您所做的就是设置类中所需的状态。

参见Class Inheritance and Initialization有关详细信息,请参见Swift 编程语言

关于 swift 。不再需要初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29038599/

相关文章:

ios - 使用 Swift 5 - PDFKit 在 iOS 中编辑和保存现有的 pdf 文档

java - 如何在 Java 中初始化 Set?

generics - 如何为泛型 Vec<T> 的向量实现特征?

python - 函数调用python中的表达式吗?

java - 生成器在预期输出之前打印 null

c++ - 通过连接另一个 char* 来初始化 const char*

ios - swift : scroll the view up when keyboard shows

swift - 泛型继承和 Swift 编译器

ios - 如何使用 Swift 语法在 GPUImage2 中将两个图像混合在一起

matlab - 在 Matlab 中连接二元运算符(如 "3++ 2")不会出错