美文网首页
Swift的协议和扩展

Swift的协议和扩展

作者: 今年27 | 来源:发表于2021-10-15 14:58 被阅读0次

在扩展里添加协议遵循

你可以扩展一个已经存在的类型来采纳和遵循一个新的协议,就算是你无法访问现有类型的源代码也行。扩展可以添加新的属性、方法和下标到已经存在的类型,并且因此允许你添加协议需要的任何需要。

protocol TextRepresentable{
    var textualDescription: String{get}
}
extension Dice:TextRepresentable{
    var textualDescription: String{
        return "A \(sides)-side dice"
    }
}

有条件地遵循协议

泛型类型可能只在某些情况下满足一个协议的要求,比如当类型的泛型形式参数遵循对应协议时。你可以通过在扩展类型时列出限制让泛型类型有条件地遵循某协议。在你采纳协议的名字后面写泛型 where 分句。

protocol TextRepresentable{
    var textualDescription: String{get}
}

extension Array:TextRepresentable where Element:TextRepresentable{
    var textualDescription: String{
        let itemsAsText = self.map{$0.textualDescription}
        return "[" + itemsAsText.joined(separator:",") + "]";
    }
}

使用扩展声明采纳协议

如果一个类型已经遵循了协议的所有需求,但是还没有声明它采纳了这个协议,你可以让通过一个空的扩展来让它采纳这个协议。

struct Hamster{
    var name:String
    var textualDescription: String{
        return "A hamster named \(name)"
    }
}
extension Hamster:TextRepresentable{}

协议扩展

协议可以通过扩展来提供方法和属性的实现以遵循类型。这就允许你在协议自身定义行为,而不是在每一个遵循或者在全局函数里定义。

extension RandomNumberGenerator{
    func randomBool() -> Bool {
        return random() > 0.5
    }
}
let generator = LinearCongruentialGenerator()
generator.random()
generator.randomBool()

提供默认实现

你可以使用协议扩展来给协议的任意方法或者计算属性要求提供默认实现。如果遵循类型给这个协议的要求提供了它自己的实现,那么它就会替代扩展中提供的默认实现。

protocol ValidatesPhoneNumber {
    func validatePhoneNumber(_ phoneNumber: String) -> Bool
}

extension ValidatesPhoneNumber {
    func validatePhoneNumber(_ phoneNumber: String) -> Bool {
        if phoneNumber.count != 11 {
            return false
        }
        return true
    }
}

给协议扩展添加限制

当你定义一个协议扩展,你可以明确遵循类型必须在扩展的方法和属性可用之前满足的限制。在扩展协议名字后边使用 where 分句来写这些限制。

extension Collection where Iterator.Element: TextRepresentable{
    var textualDescription: String{
        let itemsAsText = self.map{$0.textualDescription}
        return "[" + itemsAsText.joined(separator:",") + "]";
    }
}

相关文章

  • Swift协议和扩展

    协议 与OC中一样,协议的关键字也是protocol在Swift中,class(类)、struct(结构体)、en...

  • swift —— 协议和扩展

    用 "protocol" 关键字来声明一个协议。例: 注:对于类如果方法中要修改 self;对于结构体,枚举,如果...

  • Swift:协议和扩展

    Protocols and Extensions github:Swift基础实例github:SwiftBasi...

  • Swift的协议和扩展

    在扩展里添加协议遵循 你可以扩展一个已经存在的类型来采纳和遵循一个新的协议,就算是你无法访问现有类型的源代码也行。...

  • Swift协议和扩展(四)

    1. 协议, 协议可以看成一个类的需求清单, 类可以声明它们拥有这些属性和方法. 协议看起来和类非常相似, 只是没...

  • Swift(九)协议和扩展

    更新:2018.05.24 整理了一下demo:SwiftDemo 扩展(Extension) Swift中,扩展...

  • Swift基础-协议和扩展

    协议 协议是描述某物必须具有的属性和方法的一种方式。然后,您可以告诉Swift哪些类型使用该协议-这一过程称为采用...

  • swift中的协议和扩展

    1.Swift中的Protocol 什么是Protocol? Protocol是Swift中的一种自定义类型,可以...

  • Swift 中的协议和扩展

    协议 协议的语法 自定义类型声明时,将协议名放在类型名的冒号之后来表示该类型采纳一个特定的协议。多个协议可以用都好...

  • 可选协议和协议扩展

    // 可选协议和协议扩展 // 原生的 Swift protocol里 没有可选项,所有定义的方法都是必须实现的。...

网友评论

      本文标题:Swift的协议和扩展

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