3 つのパラメーターを受け取るイニシャライザーが必要な SlidingNavigationController を作成しました。3 つのパラメーターはすべて 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 がコードの最後の行でコンパイルに失敗することです。
Swift/Xcode の補完でさえ、このイニシャライザを使用するオプションを提供しているため、これが機能しない理由がわかりません。そして、渡されたすべてのパラメーターは、SlidingIconProtocol に確認されます。
コードのどこが間違っているのか、Swiftで同じことを達成する正しい方法は何ですか(まったく可能ですか)?