Fre*_*red 4 generics uiviewcontroller ios swift
我正在尝试创建一个这样的类:
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")
}
}
Run Code Online (Sandbox Code Playgroud)
当我想像我那样使用我的课时:
self.navigationController?.pushViewController(MyClass<UIView>(), animated: true)
Run Code Online (Sandbox Code Playgroud)
方法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 then
self.navigationController?.pushViewController(MyClass(viewCls: UIView.self), animated: true)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2608 次 |
| 最近记录: |