Swift2.2 failable initializer允许提前返回nil以及和Java的不同

Swift2.2 failable initializer允许提前返回nil以及和Java的不同,第1张

概述发现swift和java有一个完全不一样的地方  在swift中, 子类必须先初始化子类的所有属性, 然后才能调用父类的构造器. 而在java中.super调用必须出现在构造函数的第一行. java代码 public class Dog { String name; Dog(String name){ this.name = name; }}class NoisyDog ext

发现swift和java有一个完全不一样的地方

在swift中,子类必须先初始化子类的所有属性,然后才能调用父类的构造器. 而在java中.super调用必须出现在构造函数的第一行.

java代码

public class Dog {	String name;	Dog(String name){		this.name = name;	}}class NoisyDog extends Dog {	int age;		NoisyDog(String name) {        // 交换以下两行的顺序会报错: Constructor call must be the first statement in a constructor		super(name);        this.age = 5;	}	}

对应的swift代码:

class Dog {    var name: String;    init(name: String){      self.name = name;    }}class NoisyDog: Dog {    var age: Int        overrIDe init(name: String) {        //交换以下两行的顺序会报错error: property 'self.age' not initialized at super.init call        self.age = 5;        super.init(name: name);           }    }

书中关于failable initializer描述有错误

以下代码在swift2.1及之前会编译错误,在swift2.2中修正了这个BUG
swift2.2: 子类failable designated 构造器在返回nil前不必初始化子类的属性也不必调用父类的designated initializer,也就是说,在子类的failable initilizer中允许提前返回nil

//: Playground - noun: a place where people can playimport Foundationclass Dog{    var name: String    init(name: String){        self.name = name    }    }class NoisyDog : Dog {    var age: Int        overrIDe init(name: String){        self.age = 5        super.init(name: name)    }        init?(name: String,age: Int){        // as of swift2.2: 子类failable designated 构造器在返回nil前不必初始化子类的属性        // 也不必调用父类的designated initializer        if age < 0 {            return nil        }                self.age = age;        super.init(name: name)    }        }

见: http://stackoverflow.com/questions/26495586/best-practice-to-implement-a-failable-initializer-in-swift/26497229#26497229

总结

以上是内存溢出为你收集整理的Swift2.2 failable initializer允许提前返回nil以及和Java的不同全部内容,希望文章能够帮你解决Swift2.2 failable initializer允许提前返回nil以及和Java的不同所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存