ios – Swift,创建一个Generic UIViewController

ios – Swift,创建一个Generic UIViewController,第1张

概述我正在尝试创建一个这样的类: class MyClass<T:UIView>: UIViewController{ override init() { super.init(nibName: nil, bundle: nil); } required init(coder aDecoder: NSCoder) { fatalEr 我正在尝试创建一个这样的类:

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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1060821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存