Generics 基于泛型类型T的扩展,其中T:Swift中的协议?
是否可以在Swift中基于协议编写扩展 我知道我可以使用基类,但我不想使用Generics 基于泛型类型T的扩展,其中T:Swift中的协议?,generics,swift,protocols,Generics,Swift,Protocols,是否可以在Swift中基于协议编写扩展 我知道我可以使用基类,但我不想使用 protocol SomeProtocol { var numbers: [Int] { get set } } extentension T: SomeProtocol { func sumarize() -> Int { return self.numbers.reduce(0, +) } } 我认为这是不被支持的。正如您在苹果官方文档中看到的:- 扩展向现有类、结
protocol SomeProtocol {
var numbers: [Int] { get set }
}
extentension T: SomeProtocol {
func sumarize() -> Int {
return self.numbers.reduce(0, +)
}
}
我认为这是不被支持的。正如您在苹果官方文档中看到的:- 扩展向现有类、结构或枚举类型添加新功能
不幸的是,这里似乎没有介绍协议您可以。事实上,许多内置类型都是用它实现的。比如:
extension Array : Printable, DebugPrintable {
var description: String { get }
var debugDescription: String { get }
}
我的意思是,你可以在一个扩展中实现一个协议。看
在您的情况下,在extent:SomeProtocol{…}中实现var number:[Int]是您的责任。比如:
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, +)
}
}
我想,我的答案不是回答你的问题。也许你要找的是我的意思,T是一个泛型类。因此,该扩展只适用于实现协议“SomeProtocol”的所有类。请参阅我在您的原始帖子中的评论。