我創建了一個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())
的問題是,斯威夫特無法編譯上的代碼的最後一行:「不能與類型的參數列表「調用初始化類型‘SlidingNavigationController’ (centralVC:CentralVC,leftVC:LeftVC,rightVC:RightVC)'「
不知道爲什麼這不起作用,因爲即使Swift/Xcode完成也給了我選項來使用這個初始化器。所有通過參數確認到SlidingIconProtocol。
有誰知道代碼有什麼問題,什麼是正確的方式在Swift中實現相同(是否有可能)?
感謝您的快速回答和解釋。我試過你的解決方案,它的作品! –
@MatejUkmar:很高興聽到:) –