我创建了一个 SlidingNavigationController,我想在其中创建一个带有三个参数的初始化程序。所有三个参数都应该是 UIViewControllers 但他们需要确认我的 SlidingIconProtocol。所以我写了这样的代码(简化版):
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 无法在最后一行代码上编译:“无法使用类型为 '(centralVC: CentralVC, leftVC: LeftVC, rightVC: RightVC)' 类型的参数列表调用类型 'SlidingNavigationController' 的初始化程序”
不知道为什么这不起作用,因为即使是 Swift/Xcode 完成也让我可以选择使用这个初始化程序。并且所有传递的参数都确认到 SlidingIconProtocol。
有谁知道代码有什么问题以及在 Swift 中实现相同目标的正确方法是什么(有可能吗)?