Swift协议中的“ init”-做什么用?

问题描述 投票:1回答:2

您能否解释一下为什么要将初始化程序放在Swift的协议中?我认为协议的责任是定义具体的实现方式,而不必详细说明实现细节。初始化器不是这样吗?

swift solid-principles swift-protocols
2个回答
1
投票

这是一个非常人为的示例:

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具体值。


0
投票

有时您实际上希望协议明确声明类型支持特定类型的初始化程序。实际上,标准库中有几种,使您自己的某些类型符合它们很有用。例如查看ExpressibleByArrayLiteral。此协议是您可以使用数组文字(例如Set

初始化[1,2,3]的原因)
© www.soinside.com 2019 - 2024. All rights reserved.