ios - Swift,创建一个通用的 UIViewController

标签 ios generics swift uiviewcontroller

我正在尝试创建一个这样的类:

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 评论中所述,通用类无法在 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)

关于ios - Swift,创建一个通用的 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26996964/

相关文章:

ios - 有没有办法在 iOS 上训练 TensorFlow 模型?

ios - 在 obj c 中快速导入 Swift 非 View Controller 类

ios - 在没有 NavigationBar 的情况下将数据从 AppDelegate 传递到 TableViewController

c# - 泛型与接口(interface)的实际优势

java.lang.Comparable<T> 无法转换为 T”

c# - 当类型参数为 IEnumerable<T> 时,如何将扩展方法附加到泛型类?

ios - 如何检查UIView是否为空

ios - 我可以关闭仅在构建机器中使用的帐户的双因素身份验证吗?

ios - ABAddressBookGetAuthorizationStatus 在设置中授权后被拒绝

swift - 如何在远程服务器中持久保存 HKQueryAnchor