Я создал SlidingNavigationController, где я хотел иметь инициализатор, который принимает три параметра. Все три параметра должны быть UIViewControllers, но они должны подтвердить мой SlidingIconProtocol. Так что я написал код, как это (упрощенный вариант):Что не так с моим шаблоном/родовым инициализатором/конструктором Swift?
struct SlidingItem {
var bigIconView: UIView
var smallIconView: UIView
}
protocol SlidingIconProtocol {
var slidingItem: SlidingItem { get set }
}
class SlidingNavigationController: UIViewController {
init<T:UIViewController where T:SlidingIconProtocol>(centralVC: T, leftVC: T, rightVC: T) {
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class CentralVC: UIViewController, SlidingIconProtocol {
var slidingItem = SlidingItem(bigIconView: UIView(), smallIconView: UIView())
}
class LeftVC: UIViewController, SlidingIconProtocol {
var slidingItem = SlidingItem(bigIconView: UIView(), smallIconView: UIView())
}
class RightVC: UIViewController, SlidingIconProtocol {
var slidingItem = SlidingItem(bigIconView: UIView(), smallIconView: UIView())
}
let myVC = SlidingNavigationController(centralVC: CentralVC(), leftVC: LeftVC(), rightVC: RightVC())
Проблема заключается в том, что Swift не удается собрать на последней строке кода с: «Не может вызвать инициализатор для типа„SlidingNavigationController“со списком аргументов типа" (centralVC: CentralVC, leftVC: LeftVC, rightVC: RightVC) '"
Не знаете, почему это не работает, так как даже выполнение Swift/Xcode дает мне возможность использовать этот инициализатор. И все переданные параметры подтверждают SlidingIconProtocol.
Кто-нибудь знает, что не так с кодом и как правильно в Swift достичь того же (возможно ли это вообще)?
Спасибо за быстрый ответ и объяснения. Я попробовал ваше решение, и оно работает! –
@MatejUkmar: С удовольствием слышу это :) –