关于链式调用(函数式)

2017-02-28  本文已影响59人  __Objc

关于链式

 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这个属性达到链式调用

上一篇 下一篇

猜你喜欢

热点阅读