我有一個類來實現一個協議,以添加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