在Swift中,类、结构体、枚举都可以使用
init?
来定义可失败初始化器。如下所示:
class Perosn {
var name : String
init?(name:String) {
if name.isEmpty {
return nil
}
self.name = name
}
}
var p1 = Perosn(name: "")
print(p1) //nil
var p2 = Perosn(name: "Allison")
print(p2) //Optional(swift_demo.Perosn)
系统中的可失败初始化器应用场景:
1. Int基本数据类型可失败初始化器
02.png 03.png@inlinable public init?(_ description: String)
2. 枚举类型可失败初始化器
04.png
总结:
使用可失败初始化器也需要注意以下几点:
05.png
① 不允许同时定义参数标签,参数个数,参数类型相同的可失败初始化器
和非可失败初始化器
;②
06.png可失败初始化器
可以调用非可失败初始化器
;
③
07.png可失败初始化器
可以调用可失败初始化器
,其中一个初始化过程失败,之后的代码都停止执行。
如果便捷初始化方法里面self.init(name: "")
初始化失败,那么后面的self.name = "Allison"
代码都将停止执行。
网友评论