Скажем, у меня есть эти протоколыКак сделать пристройку к протоколу, используя associatedtype и массив
protocol Actionable {
}
protocol M: class {
associatedtype Action: Actionable
var views: [Action] { get set }
}
и две функции
func f(view: Actionable) {
}
func g(views: [Actionable]) {
}
И расширить протокол M
extension M {
func add(view: Action) {
views.append(view)
f(view)
g(views)
}
}
Когда я звоните f(view
он работает. Но когда я называю g(views)
он показывает ошибку
Невозможно преобразовать значение типа '[Self.Action] ожидаемого типа аргумента «[Осуществимый]»
Здесь g
принимает массив вместо одного объект, такой как f
. Почему массив имеет значение в этом случае? Как обойти это?
Как примечание стороны, это, кажется, вид ошибки для родового структуры, слишком
protocol Actionable {
}
struct M<T: Actionable> {
var views: [T]
}
func g(views: [Actionable]) {
}
extension M {
func add() {
g(views)
}
}
Ох, спасибо за этот очень подробный ответ – onmyway133