前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift入门:协议

Swift入门:协议

作者头像
韦弦zhy
发布2020-03-19 20:46:14
4950
发布2020-03-19 20:46:14
举报
\color{red}{\Huge \mathtt{SWIFT}}
\color{red}{\Huge \mathtt{SWIFT}}
\color{orange}{\Large \mathbf{协议}}
\color{orange}{\Large \mathbf{协议}}
\underline{\color{#3399CC}{\large \mathit{Protocols}}}
\underline{\color{#3399CC}{\large \mathit{Protocols}}}

协议在Swift中是有效的契约:它们定义了一组方法和属性,如果一个类型说它遵守协议,那么它必须实现这些方法和属性。这个合同让我们可以灵活地使用不同的类型来解决同一个问题——我们不知道是使用ThingA还是ThingB,只要它们都符合Thing协议。

例如,员工(Employee)协议可能如下所示:

代码语言:javascript
复制
protocol Employee {
    var name: String { get set }
    var jobTitle: String { get set }
    func doWork()
}

这里面有三件重要的事情。

首先,两个属性后面都有{get set}。这意味着一致性类型必须使它们既可获取(可读)又可设置(可写),这反过来意味着如果一个类型说它遵守Employee协议,它必须使这两个属性变量而不是常量。

其次,doWork()内部没有代码。协议是定义某些东西应该如何行为的契约,而不提供这些行为的实现。

第三,该协议不是类型,这意味着我们不能创建它的实例。但是我们可以创建符合它的类和结构体

比如下方示例:

代码语言:javascript
复制
struct Executive: Employee {
    var name = "Steve Jobs"
    var jobTitle = "CEO"

    func doWork() {
        print("I'm strategizing!")
    }
}

struct Manager: Employee {
    var name = "Maurice Moss"
    var jobTitle = "Head of IT"

    func doWork() {
        print("I'm turning it off and on again.")
    }
}

现在我们有了一个协议和两种符合它的类型,我们可以尝试使用它:

代码语言:javascript
复制
let staff: [Employee] = [Executive(), Manager()]

for person in staff {
    person.doWork()
}

因为这两种类型都遵循Employee协议——它们实现了该协议的属性和方法——我们可以创建一个Employee数组并使用该数组中的对象,而不必知道它们的实际类型是什么。

本文来自Hacking with Swift 给 swift 初学者的入门课程 Swift for Complete Beginners Protocols

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档