博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift2.2 failable initializer允许提前返回nil以及和Java的不同
阅读量:7022 次
发布时间:2019-06-28

本文共 1612 字,大约阅读时间需要 5 分钟。

hot3.png

发现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

 

 

转载于:https://my.oschina.net/uniquejava/blog/683106

你可能感兴趣的文章
MOS2010开发基础和集几种开发模型
查看>>
sqlDB类
查看>>
常用1
查看>>
WPF中的DoubleAnimation
查看>>
JAVA学习笔记1
查看>>
2013-1-17 打开/关闭默认共享的命令
查看>>
oracle数据库中函数的递归调用
查看>>
pkgmgmt: Comparison between different Linux Systems..
查看>>
python--gevent协程及协程概念
查看>>
Java 打包成exe安装包
查看>>
EF执行出错~NotSupportedException
查看>>
A.出题人的RP值
查看>>
jQuery中$().each与$.each的区别
查看>>
大数据开发从入门小白到删库跑路(一)- 获取Hadoop
查看>>
ES6新特性概览
查看>>
[转] React Hot Loader 3 beta 升级指南
查看>>
slice,substr和substring的区别
查看>>
迭代器、生成器、面向过程编程
查看>>
使用async实现异步控制
查看>>
第一次实训作业
查看>>