是否可以根据Swift中的协议编写扩展名?
我知道我可以使用基类,但我不愿意。
protocol SomeProtocol {
var numbers: [Int] { get set }
}
extentension T: SomeProtocol {
func sumarize() -> Int {
return self.numbers.reduce(0, +)
}
}
答案 0 :(得分:0)
我不认为这是支持的。正如您在官方Apple文档中看到的那样: -
扩展程序为现有的类,结构或枚举类型添加新功能。
不幸的是协议似乎没有在这里讨论
答案 1 :(得分:0)
你可以。实际上,许多内置类型都是用它实现的。像:
extension Array : Printable, DebugPrintable {
var description: String { get }
var debugDescription: String { get }
}
我的意思是,您可以在扩展程序中实施协议。请参阅this document
在您的情况下,在var numbers:[Int]
中实施extentension T: SomeProtocol { ... }
是您的责任。像:
protocol SomeProtocol {
var numbers: [Int] { get set }
}
struct T {
private var _numbers:[Int] = [1,2,3]
}
extension T:SomeProtocol {
var numbers:[Int] {
get {
return self._numbers
}
set(newVal) {
self._numbers = newVal
}
}
func sumarize() -> Int {
return self.numbers.reduce(0, +)
}
}