首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift协议中的"init“--为什么?

Swift协议中的"init“--为什么?
EN

Stack Overflow用户
提问于 2020-01-07 09:32:12
回答 2查看 49关注 0票数 1

你能解释一下为什么要在Swift的协议中加入初始化器吗?我认为协议的责任是定义具体的实现可以做什么,而不是具体的实现细节。初始化器不就是这样的东西吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-07 09:42:32

下面是一个非常做作的例子:

代码语言:javascript
复制
protocol P {
    init(a: Int)
}

class B: P {
    let a: Int
    required init(a: Int) {
        self.a = a
    }
}

func factory<T: P>(a: Int) -> T {
    return T(a: a)
}

let b: B = factory(a: 1)

通过允许协议(P)指定所需的初始值设定项,我可以编写需要创建新对象的factory函数。

init并没有说明如何处理传入的Int --只是说明可以从Int中生成P的具体值。

票数 3
EN

Stack Overflow用户

发布于 2020-01-07 09:46:23

有时,您实际上希望协议显式声明类型支持特定类型的初始值设定项。事实上,标准库有几个这样的类型,让你自己的一些类型符合它们是很有用的。例如,请查看ExpressibleByArrayLiteral。这就是为什么您可以使用像[1,2,3]这样的数组文字初始化Set的原因

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59621094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档