ios - 试图给 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
}
}
任何帮助将不胜感激!!!
解决方案
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
}
}
推荐阅读
- c# - 从 azure blob 存储资源管理器手动下载文件后文件内容丢失
- javascript - .Net Core 项目上的 JavaScript 日期无效
- python - Python 3.7 不支持赋值表达式
- c++ - 评估 Google Cloud Storage (GCS) API 选项
- mysql - 每 15 分钟获得一次占用
- wso2 - Wso2 api 管理器。将自定义属性添加到限制事件消息有效负载
- javascript - 处理鼠标移过线条对象时的Fabric JS奇怪问题
- matplotlib - Matplotlib 子图如何将颜色条与其他图例对齐,或如何将子图向左对齐
- python - Python:如何根据列表变量从 data_frame 中删除行
- powershell - 线程仍然使用 -asjob 和 wait-job 执行吗?