首页 > 解决方案 > 试图给 UIButton 一个特殊的属性

问题描述

我需要 UIButton 才能拥有属性 bookId。我尝试了以下代码,但它给了我错误Property 'self.bookId' not initialized at super.init call。当单击按钮时,我需要该属性能够查询该特定 bookId 的数据库。

import UIKit

class BookUIButton: UIButton {
var bookId: String

init(frame: CGRect, bookId: String) {
    super.init(frame: frame);
    self.bookId = bookId
}

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

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

override func awakeFromNib() {
    super.awakeFromNib()

    //TODO: Code for our button
}
}

任何帮助将不胜感激!!!

标签: iosswiftuibutton

解决方案


swift 强制您在使用/可能使用之前初始化每个成员 var。由于无法确定超级转弯时会发生什么,因此会出错:安全总比抱歉好!

解决方案1:

class BookUIButton: UIButton {
var bookId: String?

init(frame: CGRect, bookId: String) {
    super.init(frame: frame);
    self.bookId = bookId
}

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

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

override func awakeFromNib() {
    super.awakeFromNib()

    //TODO: Code for our button
}
}

解决方案 2:有更好的方法可以跳过此错误。所以你所要做的就是在声明后初始化成员:

class BookUIButton: UIButton {
var bookId: String = String()

init(frame: CGRect, bookId: String) {
    super.init(frame: frame);
    self.bookId = bookId
}

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

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

override func awakeFromNib() {
    super.awakeFromNib()

    //TODO: Code for our button
}
}

推荐阅读