我有一个类来实现一个协议,以添加3个变量。我专门设置了图像变量,调试器显示该变量存在,但在代码打印时显示为零,我的if let
语句也认为该变量为零。变量不是零,但代码认为它是零
@objc protocol DashboardItem {
var title: String { get }
var detail: String { get }
optional var image: UIImage { get }
}
class StaticDashboardItem: DashboardItem {
var title: String
var detail: String
var image: UIImage?
init(title: String, detail: String, image: UIImage) {
self.title = title
self.detail = detail
self.image = image
}
}
编辑:新截图
日志
nil
2
是的,这就是为什么我在评论交流中提示他说明'dashboardItem'是如何声明的。现在我们知道(正如我怀疑的那样)它是一个DashboardItem,所以他的代码中的'image'属性是(可选)_protocol_' image'属性,而不是(可选)实例属性。 – matt 2015-04-03 15:58:17
是的,这完全有道理,所以没有Swift的bug,一切都完全合乎逻辑。 – AliSoftware 2015-04-03 16:00:28
另外,他将需要考虑到可选协议成员本身包含在可选项中的事实。这就是为什么他得到“无”;这是_that_可选,它报告“此可选成员未实现。”即使它实现了,他也需要拆开它才能看到图像。如果他将可选成员重写为可选成员,则它将被_double-wrapped_。我的书谈到这个:http://www.apeth.com/swiftBook/ch04.html#SECoptionalProtocol – matt 2015-04-03 16:03:54