美文网首页
2020-11-10协议和拓展

2020-11-10协议和拓展

作者: 脑子 | 来源:发表于2020-11-10 04:38 被阅读0次
    //协议,Identifiable协议要求所有遵循协议的类型必须有一个 id 字符串属性,并且这个字符串可读写。
    protocol Identifiable {
        var id: String { get set
        }
    }
    //遵循协议的结构体
    struct User: Identifiable {
        var id: String
    }
    func displayID(thing: Identifiable){
        print("My ID is \(thing.id)")
    }
    
    //协议继承
    protocol Payable {
        func calculateWages() -> Int
    }
    protocol NeedsTraining {
      func study()
    }
    protocol HasVacation {
      func takeVacation(days: Int)
    }
    //创建一个 Employee 协议,将上面的三个协议合并在一起,
    //现在我们就可以创建遵循这个单一协议的类型,而不是分别遵循三个协议的类型
    protocol Employee: Payable, NeedsTraining,HasVacation{}
    

    扩展

    //扩展使得你可以为已经存在的类型添加方法,实现它们设计时没有做的事情
    extension Int{
        func squared() -> Int {
            return self * self
        }
    }
    let number = 9
    number.squared()
    
    //Swift不允许你通过扩展添加存储属性,但可以用扩展添加计算属性
    extension Int{
        var isEven: Bool{
            return self % 2 == 0
        }
    }
    
    //协议扩展
    let pythons = ["ben","ben","lang","zai","chi","fan"]
    let beatlse = Set(["John","Paul","George","Ringo"])
    //Swift的数组和集合都遵循一个叫 Collection 的协议,因此可以给 Collection 协议扩展一个叫 summarize() 的方法,这个方法逐一打印collection里的元素
    extension Collection {
        func summarize(){
            print("There are \(count) of us:")
            for name in self {
                print(name)
            }
        }
    }
    pythons.summarize()
    beatlse.summarize()
    
    
    //面向协议编程
    //协议扩展可以为我们自己的协议方法提供默认实现
    protocol Identifibale{
        var id: String {get set}
        func identify()
    }
    
    extension Identifiable {
        func identify(){
            print("My ID is \(id)")
        }
    }
    //再声明一个遵循 Identifiable 协议的类型时,它会自动获得 identify() 方法的实现
    struct User: Identifiable{
        var id: String
    }
    
    let paul = User(id: "Paul")
    paul.identify()
    
    

    • 协议描述了一个遵循它的类型应该拥有的属性和方法,但并不提供那- 些方法的实现。
    • 你可以基于协议创建协议,这一点跟类相似。
    • 扩展允许你为类型添加方法和计算属性。
    • 协议扩展是为协议添加方法和计算属性。
    • 面向协议编程是这样一种实践:它把程序架构按照一系列协议来设计,然后利用协议扩展来提供默认实现

    相关文章

      网友评论

          本文标题:2020-11-10协议和拓展

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