You can. In fact, many of builtin types are implemented with that. like:
extension Array : Printable, DebugPrintable {
var description: String { get }
var debugDescription: String { get }
}
I mean, you can implement a protocol in a extension. see this document
In your case, implementing var numbers:[Int]
in extentension T: SomeProtocol { ... }
is your responsibility. like:
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, +)
}
}