【问题标题】:Swift nsobjectype constructorSwift nsobjecttype 构造函数
【发布时间】:2014-09-15 07:32:01
【问题描述】:

我正在尝试快速创建一个小部件管理器,并创建我决定使用动态类型的小部件,并根据小部件类的名称实例化我的小部件。我所有的小部件都继承自 abstractUIWidget 类型。是的,有了这段代码,我无法建立我的通话。

    var anyobjectype : AnyObject.Type = NSClassFromString(widgetType)
    var nsobjectype : AbstractUIWidget.Type = anyobjectype as AbstractUIWidget.Type
    var rec: AbstractUIWidget = nsobjectype(frame:CGRectMake(0, 0, 0, 0))

我在下一行得到一个错误。

    var rec: AbstractUIWidget = nsobjectype(frame:CGRectMake(0, 0, 0, 0))

使用元类型值构造类类型“AbstractUIWidget”的对象必须具有“必需”初始化程序。

但在我的 AbstractUIWidget 类中,我有以下方法:

override init(frame: CGRect) {
    super.init(frame: frame)
}

required override init() {
    super.init()
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

我错过了什么吗?谢谢你的帮助 !

【问题讨论】:

    标签: ios cocoa constructor swift ios8


    【解决方案1】:

    你必须使这个初始化器成为必需的:

    override init(frame: CGRect) {
        super.init(frame: frame)
    }
    

    在操场上使用此代码进行了测试,并且可以正常工作:

    class AbstractUIWidget : UIView {
        required override init(frame: CGRect) {
            super.init(frame: frame)
        }
    
        required override init() {
            super.init()
        }
    
        required init(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
        }
    }
    
    class ConcreteUIWidget : AbstractUIWidget {       
    }
    
    var widgetType = ConcreteUIWidget.description()
    
    var anyobjectype : AnyObject.Type = NSClassFromString(widgetType)
    var nsobjectype : AbstractUIWidget.Type = anyobjectype as AbstractUIWidget.Type
    var rec: AbstractUIWidget = nsobjectype(frame:CGRectMake(0, 0, 0, 0))
    

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 2017-01-21
      相关资源
      最近更新 更多