Я пытаюсь написать класс, который имеет массив объектов, соответствующий MyProto
, и у меня есть способ принять [MyProto]
для различной обработки перед добавлением к этому массиву. Здесь есть детская площадка.Swift: передать массив типа T методу, принимающему массивы протокола T
protocol MyProto {
func sayHello()
}
extension MyProto {
func sayHello() {
print("hello")
}
}
struct MyStruct: MyProto {
}
class MyClass {
var protos: [MyProto] = []
func doSomethingAndThenStore(newProtos: [MyProto]) {
for proto in newProtos {
proto.sayHello()
}
protos.appendContentsOf(newProtos)
}
}
let myStructs = [MyStruct(), MyStruct()]
let myClass = MyClass()
myClass.doSomethingAndThenStore(myStructs)
На последней строке я нахожу ошибку, error: cannot convert value of type '[MyStruct]' to expected argument type '[MyProto]'
. Если я изменю его на myStructs as [MyProto]
, ошибка изменится на error: cannot convert value of type '[MyStruct]' to type '[MyProto]' in coercion
.
Как передать в массив конкретных типов метод, который принимает массив протоколов?
Это делает много смысла. Я думаю, что я просто добавлю перегрузку для 'doSomethingAndThenStore', который делает карту и вызывает другую. –
wjl