如何继承UIStoryboard。我试着做定制的UIStoryboard来封装我的vars,就像这样。
open class MyStoryboard: UIStoryboard {
open var connectionRequest: myRosterConnectionRequestsController {
return get(identifier: "ConnectionRequest")
}
open var roster: myRosterController {
return get(identifier: "Roster")
}
open var profile: myProfileController {
return get(identifier: "Profile")
}
override init() {
super.init(name: "Messenger", bundle: Bundle.my) // <<< this is error
}
}
extension UIStoryboard {
open static var myMessanger: MyStoryboard { return MyStoryboard() }
fileprivate func get<U: UIViewController>(identifier: String) -> U {
return self.instantiateViewController(withIdentifier: identifier) as! U
}
}但我在init MyStoryboard中有错误
必须调用超类的指定初始化程序“UIStoryboard”
我能写MyStoryboard吗?是的,我可以将MyStoryboard作为独立的类并封装为UIStoryboard的实例,但是我希望我的类是UIStoryboard的继承。
发布于 2017-10-31 22:10:38
您不能子类UIStoryboard类。实际上,init(name: String, bundle storyboardBundleOrNil: Bundle?)是一个静态工厂方法,而不是Swift意义上的初始化器。
看看目标-C的定义。
+ (UIStoryboard *)storyboardWithName:(NSString *)name
bundle:(NSBundle *)storyboardBundleOrNil;在这种情况下,在基类中没有可以继承的初始化程序。实际上,您应该调用的指定的初始化器是来自init()的NSObject。
在这里,您可以找到更详细的解释,为什么不可能是https://stackoverflow.com/a/29872355/1692080
https://stackoverflow.com/questions/47044697
复制相似问题