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/

10-11 23:18