关于链式
- 个人理解
就是同一对象接连调用各种方法来设置属性或者行为
例如
let person = Person().add().eat().run().play()
来初始话一个成员
而对象一初始化就会有这种属性
- 类似
类似的我们初始化一个对象可能也会这么做:
class Person:NSObjc{
var name:String?
var age:String?
var sex:String?
func init(name:String,age:String,sex:String){
self.name = name
self.age = age
self.sex = sex
}
}
class Test:NSObjc{
let person = Person("aa","20","1")
}
但是考虑到可扩展性,比如Person多加了一个身高属性height
那么我们一般会这么做
class Person:NSObjc{
var name:String?
var age:String?
var sex:String?
var height:Double?
func init(name:String,age:String,sex:String,height:Double?){
self.name = name
self.age = age
self.sex = sex
self.height = height
}
}
class Test:NSObjc{
let person = Person("aa","20","1",187)
}
但是这样做相当麻烦
swift给我们提供了方法重载
那么我们可以这么做
class Person:NSObjc{
var name:String?
var age:String?
var sex:String?
var height:Double?
func init(name:String,age:String,sex:String){
self.name = name
self.age = age
self.sex = sex
}
func init(name:String,age:String,sex:String,height:Double?){
self.init(name:name,age:age,sex:sex)
self.height = height
}
}
class Test:NSObjc{
let person = Person("aa","20","1",187)
}
这样我们就可以扩充很多很多方法
- 写在最后
上面是我们经常这样做的 但是我觉得还是不够好用,于是总结了一些经验
直接上代码
class Person:NSObject{
var name:String?
var age:String?
var sex:String?
}
extension Person{
func setName(name:String?) -> Person{
self.name = name
return self
}
func setAge(age:String?) -> Person{
self.age = age
return self
}
func setSex(sex:String?) -> Person{
self.sex = sex
return self
}
}
class Test:NSObject{
let person = Person().setName(name: "hhh").setAge(age: "20").setSex(sex: "1")
}
这样做在设置某些控件属性的时候相当有用,比如UILabel的numberOfLines只提供了属性,那么我们可以提供一个方法来设置numberOfLines这个属性达到链式调用
网友评论