Я хотел бы создать массив различных объектов одного и того же родового класса c:
import UIKit
struct S<V: UIView> {}
let a: [S<UIView>] = [S<UIButton>(), S<UILabel>()]
Cannot convert value of type 'S<UIButton>' to expected element type 'S<UIView>'
Cannot convert value of type 'S<UILabel>' to expected element type 'S<UIView>'
Единственный обходной путь, который я мог бы предложить, - это оболочка протокола:
import UIKit
protocol P {}
struct S<V: UIView>: P {}
let a: [P] = [S<UIButton>(), S<UILabel>()]
Я не думаю, что необходимо переопределять все свойства и методы S
в P
. Существуют ли другие решения?
РЕДАКТИРОВАТЬ:
С этим обходным путем можно столкнуться с проблемой необходимости ассоциированного типа в протоколе:
import UIKit
protocol P {
associatedtype V: UIView
}
struct S<V: UIView>: P {}
let a: [P] = [S<UIButton>(), S<UILabel>()]
Protocol 'P' can only be used as a generic constraint because it has Self or associated type requirements
Как мне решить эту проблему?