Generics 基于泛型类型T的扩展,其中T: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, +) } } 我认为这是不被支持的。正如您在苹果官方文档中看到的:- 扩展向现有类、结

是否可以在Swift中基于协议编写扩展

我知道我可以使用基类,但我不想使用

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”的所有类。请参阅我在您的原始帖子中的评论。