Swift 2初始化类方法语法不正确

时间:2015-10-22 15:38:40

标签: swift class syntax init

我在尝试为iOS Swift应用程序创建自定义类时遇到错误:

  

在从初始化程序返回之前调用了Super.init

  

永远不会被执行

这是我的代码:

class CardTableViewCell: UITableViewCell {

    //Vars
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var subtitleLabel: UILabel!
    @IBOutlet weak var thumbImage: UIImageView!
    @IBOutlet weak var detailsLabel: UILabel!
    @IBOutlet weak var costLabel: UILabel!

    init(name: String){
        self.nameLabel.text = name
    } //<-- Error here

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
        super.init(coder:aDecoder) //<--- Error Here
    }

}

我在这里做错了什么?我以前从未将init Coder方法添加到自定义类中。

我已经部分修复了代码,见下文。

更新代码:     class CardTableViewCell:UITableViewCell {

    //Vars
    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var subtitleLabel: UILabel!
    @IBOutlet weak var thumbImage: UIImageView!
    @IBOutlet weak var detailsLabel: UILabel!
    @IBOutlet weak var costLabel: UILabel!

    init(name: String, subtitle: String) {
        super.init(style: UITableViewCellStyle.Default, reuseIdentifier: name)
        self.nameLabel.text = name
        self.subtitleLabel.text = subtitle
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

var lers = CardTableViewCell(name: "Happy", subtitle: "Gilmore") //<-- ERROR HERE
print(lers.subtitleLabel.text)

错误正在返回:

  

执行被中断,原因是EXC_BAD_INSTRUCTION   (code = EXC_I386_INVOP,subcode = 0x0)

我不明白init代码的方式,内容或原因。如果有人能指出我在Swift 2上的一些适当文档,请告诉我。所有的苹果开发文档都很糟糕。

3 个答案:

答案 0 :(得分:1)

更改为:

init(name: String) {
    super.init(style: UITableViewCellStyle.Default, reuseIdentifier: name)
    self.nameLabel.text = name
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

答案 1 :(得分:0)

尝试更改此

init(name: String){
        self.nameLabel.text = name
    } //<-- Error here

对此:

init(name: String){
        self.nameLabel.text = name
        super.init(name: name)

    } //<-- Error here

答案 2 :(得分:0)

这不是您问题的直接答案,但请记住,因为您的子类属于UITableViewCell,您可能将通过dequeueReusableCellWithIdentifier(_:)间接获取单元格而不是直接构建。

因此,您可能只想将此属性作为单元生命周期的一部分(例如,在tableView(_:cellForRowAtIndexPath:)tableView(_:willDisplayCell:forRowAtIndexPath:)中)

,而不是将name属性作为自定义初始化程序传递。