首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何继承UIStoryboard

如何继承UIStoryboard
EN

Stack Overflow用户
提问于 2017-10-31 21:21:07
回答 1查看 131关注 0票数 0

如何继承UIStoryboard。我试着做定制的UIStoryboard来封装我的vars,就像这样。

代码语言:javascript
复制
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的继承。

EN

回答 1

Stack Overflow用户

发布于 2017-10-31 22:10:38

您不能子类UIStoryboard类。实际上,init(name: String, bundle storyboardBundleOrNil: Bundle?)是一个静态工厂方法,而不是Swift意义上的初始化器。

看看目标-C的定义。

代码语言:javascript
复制
+ (UIStoryboard *)storyboardWithName:(NSString *)name 
                          bundle:(NSBundle *)storyboardBundleOrNil;

在这种情况下,在基类中没有可以继承的初始化程序。实际上,您应该调用的指定的初始化器是来自init()NSObject

在这里,您可以找到更详细的解释,为什么不可能是https://stackoverflow.com/a/29872355/1692080

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47044697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档