美文网首页
关于链式调用(函数式)

关于链式调用(函数式)

作者: __Objc | 来源:发表于2017-02-28 12:30 被阅读59次

    关于链式

    • 个人理解

      就是同一对象接连调用各种方法来设置属性或者行为
      例如

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

    相关文章

      网友评论

          本文标题:关于链式调用(函数式)

          本文链接:https://www.haomeiwen.com/subject/aldxgttx.html