swift初始化函数总结
swift初始化函数总结一、很多情况下init方法并不是必须的
class Test{
let a = ""
var b : UIView!//X为nil,并不需要在初始化类时给它赋具体的值
var c = {return "c"}
lazy var d = {
return "d"
}()
}
二、默认初始化函数
例1: struct test{
var x:String!
let y:Int32!
}
那么swift会为test struct生成一个默认的初始化函数 init(x:String!,y:Int32!)
例2 struct test2{
var x:String!
let y:Int32! = 32
}
那么swift会为test2 struct生成一个默认的初始化函数 init(x:String!)
三、designated 初始化函数 和 convenience 初始化函数1.designated初始化函数
例子: class Test{
let a = ""
var b : UIView!
var c = {return "c"}
lazy var d = {
return "d"
}()
//designated初始化函数
init() {
}
}
例子: class Test{
let a = ""
var b : UIView!//X为nil,并不需要在初始化类时给它赋具体的值
var c = {return "c"}
lazy var d = {
return "d"
}()
let e:Int
//designated初始化函数
init() {
//由于e没有在定义的时候直接赋值,所以需要在desinged初始化方法中初始化
self.e = 1
}
}
例子: class ClassA { let numA: Int init(num: Int) { numA = num } } class ClassB: ClassA { let numB: Int override init(num: Int) { numB = num + 1 //先初始化numB再屌用父类init super.init(num: num) } }
2.convenience初始化方法
class ClassA { let numA: Int init(num: Int) { numA = num } convenience init(bigNum: Bool) { self.init(num: bigNum ? 10000 : 1) } }
除非满足如下规则!:
还要注意的是!:
结合上面这条规则再扩展一下:
四、可以返回失败的init函数有一些init函数是允许失败并且返回nil的,如果在init后面加一个?号或者一个!号的话 init?(arg1:Type1,...)
init!(arg1:Type1,...)
那么说明它是一个允许返回失败的init函数 //image参数是一个Optional,如果应用中并没有交名称为"foo"的图片的话,那么必然会返回nil
let image = UIImage(named: "foo")
//所以我们通常用if let语法来处理
if let image = UIImage(named: "foo") {
//image was successfully created
}else{
//do something else
}
参考资料: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |