Swift协议

Swift协议,第1张

概述面向协议(protocol-oriented)编程,苹果推荐! 主要内容: 协议作为类型来使用 使用协议来实现多态 使用协议扩展 为什么使用协议扩展 协议扩展是苹果新的面向协议编程的支柱,是Swift编程语言最重要的特定之一。使用协议扩展,我们能够为遵守协议的任何类型提供方法与属性实现。 协议作为类型 在Swift编程语言中,协议可以被看作为一种类型,像其他任何类型那样使用。这意味着协议可以作为函

面向协议(protocol-orIEnted)编程,苹果推荐!

主要内容:

协议作为类型来使用 使用协议来实现多态 使用协议扩展 为什么使用协议扩展

协议扩展是苹果新的面向协议编程的支柱,是Swift编程语言最重要的特定之一。使用协议扩展,我们能够为遵守协议的任何类型提供方法与属性实现。

协议作为类型

在Swift编程语言中,协议可以被看作为一种类型,像其他任何类型那样使用。这意味着协议可以作为函数的参数类型或者返回值类型。我们也可以使用它们来作为变量、常量与集合的类型

protocol PersonProtocol {    var firstname: String {get set}    var lastname: String {get set}    var birthDate: NSDate {get set}    var profession: String {get}    init (firstname: String,lastname: String,birthDate: NSDate)}func updatePerson(person: PersonProtocol) -> PersonProtocol {    return person}var myPerson: PersonProtocolvar people: [PersonProtocol] = []
使用协议实现多态

在编程语言中,多态是多种类型的单一接口(polymorphism is a single interface to multiple types(many forms))。之前的例子中,单一的接口是PersonProtocol协议,而多种类型是遵守该协议的任何类型。

当使用协议来获取实例时,只能使用定义在该协议中的属性与方法。如果想要使用特定个体类型中的属性或方法,需要将实例映射到那个类型。

协议中的类型映射

类型映射(type casting)是检查实例类型与将实例看作特定类型的方式。在Swift中,is关键字用来检查实例是否是特定类型,as关键字用来将实例看作特定类型。

for person in people {    if person is SwiftProgrammer {    }}
for person in people {    switch (person) {        case is SwiftProgrammer:        case is FootballPlayer:        default:    }}
协议扩展

协议扩展允许我们扩展协议来为遵守协议的类型提供方法与属性实现,它们也允许我们为所有遵守协议的类型提供普通的实现来减少为每个单独类型提供实现的需要或者创建类层次的需要。

一旦在协议中定义方法(只能在协议中定义方法,而不能实现方法),那么必须要在遵守协议的每个类型中对方法进行实现:

protocol DogProtocol {    var name: String {get set}    var color: String {get set}    func walk() -> String}struct JackRussel: DogProtocol {    var name: String    var color: String    func walk() -> String {        return "jackRussel walks"    }}

我们可以在协议之外定义方法,并且定义它的默认行为:

protocol DogProtocol {    var name: String {get set}    var color: String {get set}}extension DogProtocol {    func speak() -> String {        return "Animal speak"    }}
总结

以上是内存溢出为你收集整理的Swift协议全部内容,希望文章能够帮你解决Swift协议所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1079954.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存