class MyClass<T:UIVIEw>: UIVIEwController{ overrIDe init() { super.init(nibname: nil,bundle: nil); } required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } overrIDe func loadVIEw() { self.vIEw = T(); println("loadVIEw") } overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad(); println("vIEwDIDLoad") }}
当我想像我那样使用我的课时:
self.navigationController?.pushVIEwController(MyClass<UIVIEw>(),animated: true)
方法vIEwDIDLoad和loadVIEw永远不会被调用!!!
你知道为什么以及是否有某种方式做我想做的事.
提前致谢.
解决方法 正如OP注释中所提到的,Generic类无法在Objective-C中正确表示.解决方法是将类用作属性.这样的事情:
class MyClass: UIVIEwController{ let vIEwCls:UIVIEw.Type init(vIEwCls:UIVIEw.Type = UIVIEw.self) { self.vIEwCls = vIEwCls super.init(nibname: nil,bundle: nil); } required init(coder aDecoder: NSCoder) { self.vIEwCls = UIVIEw.self super.init(coder: aDecoder) } overrIDe func loadVIEw() { self.vIEw = vIEwCls(); println("loadVIEw") } overrIDe func vIEwDIDLoad() { super.vIEwDIDLoad(); println("vIEwDIDLoad") }}// and thenself.navigationController?.pushVIEwController(MyClass(vIEwCls: UIVIEw.self),animated: true)总结
以上是内存溢出为你收集整理的ios – Swift,创建一个Generic UIViewController全部内容,希望文章能够帮你解决ios – Swift,创建一个Generic UIViewController所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)