UIStoryboard
如何继承。我尝试做自定义UIStoryboard
以便将我的var封装在其中,就像这样。
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
}
}
但是我在初始化
MyStoryboard
时遇到错误必须调用超类“ UIStoryboard”的指定初始化程序
y,我可以初始化
MyStoryboard
吗?是的,我可以将
MyStoryboard
作为独立类并封装UIStoryboard
的实例,但是我希望我的类是UIStoryboard
的继承 最佳答案
您不能继承UIStoryboard类。实际上,init(name: String, bundle storyboardBundleOrNil: Bundle?)
是静态工厂方法,而不是Swift中的初始化程序。
看一下Objective-C的定义。
+ (UIStoryboard *)storyboardWithName:(NSString *)name
bundle:(NSBundle *)storyboardBundleOrNil;
在这种情况下,没有可在基类中继承的初始化程序。实际上,您应该调用的指定初始化程序是
init()
中的NSObject
。在这里您可以找到更详细的解释,为什么不可能
https://stackoverflow.com/a/29872355/1692080
关于ios - 如何继承UIStoryboard,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47044697/