Swift 2 初始化 Class 方法语法不正确
Incorrect Swift 2 Initialize Class Method Syntax
我在尝试为我的 iOS Swift 应用程序创建自定义 Class 时遇到错误:
Super.init called before returning from initializer
和
Will never be executed
这是我的代码:
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。
我已经部分修复了代码,请参见下文。
更新代码:
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)
返回错误:
Execution was interupted, reason EXC_BAD_INSTRUCTION
(code=EXC_I386_INVOP, subcode=0x0)
我不明白初始化代码的方式、内容或原因。如果有人能给我指出一些关于 Swift 2 的适当文档,请告诉我。苹果开发文档全是烂片
尝试改变这个
init(name: String){
self.nameLabel.text = name
} //<-- Error here
为此:
init(name: String){
self.nameLabel.text = name
super.init(name: name)
} //<-- Error here
这不是您问题的直接答案,但请记住,因为您的子类属于 UITableViewCell
,您 可能 将通过以下方式间接获取细胞dequeueReusableCellWithIdentifier(_:)
而不是直接构造then
因此,与其传入名称 属性 作为自定义初始化程序,您可能只想将其分配为单元生命周期的一部分(例如,在 tableView(_:cellForRowAtIndexPath:)
或 tableView(_:willDisplayCell:forRowAtIndexPath:)
中)
更改为:
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")
}
我在尝试为我的 iOS Swift 应用程序创建自定义 Class 时遇到错误:
Super.init called before returning from initializer
和
Will never be executed
这是我的代码:
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。
我已经部分修复了代码,请参见下文。
更新代码: 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)
返回错误:
Execution was interupted, reason EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
我不明白初始化代码的方式、内容或原因。如果有人能给我指出一些关于 Swift 2 的适当文档,请告诉我。苹果开发文档全是烂片
尝试改变这个
init(name: String){
self.nameLabel.text = name
} //<-- Error here
为此:
init(name: String){
self.nameLabel.text = name
super.init(name: name)
} //<-- Error here
这不是您问题的直接答案,但请记住,因为您的子类属于 UITableViewCell
,您 可能 将通过以下方式间接获取细胞dequeueReusableCellWithIdentifier(_:)
而不是直接构造then
因此,与其传入名称 属性 作为自定义初始化程序,您可能只想将其分配为单元生命周期的一部分(例如,在 tableView(_:cellForRowAtIndexPath:)
或 tableView(_:willDisplayCell:forRowAtIndexPath:)
中)
更改为:
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")
}