[英]Why this struct with optional values returns nothing?
我訪問了該線程以了解可選內容,並且看到了文檔中的引用,我再次引用了該引用。
如果您的自定義類型的存儲屬性在邏輯上被允許為“無值”(可能是因為初始化期間無法設置其值,或者因為稍后某個時候允許其無值),請使用可選類型。 可選類型的屬性會自動使用nil值進行初始化,這表明該屬性在初始化過程中故意有“無值”的含義。
所以我有同樣的條件。 我有一些可能有一些值或沒有值的變量。 這是我的結構
struct Notification {
var type : String?
var dp : String?
var name : String?
var postImage : String?
var whomenc : String?
}
所以我試圖創建一個結構體數組,但是每當結構體被初始化時,我一無所獲
obj.forEach {
guard let type = $0["type"] as? String else {return}
print("type = \(type)")
guard let dp = $0["dp"] as? String else {return}
print("dp = \(dp)")
guard let name = $0["name"] as? String else {return}
print("name = \(name)")
guard let postimg = $0["postimg"] as? String else {return}
print("postimg = \(postimg)")
guard let whomenc:String = $0["whomenc"] as? String else {return}
print("whomenc = \(whomenc)")
let notification = Notification(type: type, dp: dp, name: name, postImage: postimg, whomenc: whomenc)
self.notifiArray.append(notification)
print("notifiArray.count = \(self.notifiArray.count)") // this satement doesn't gets executed.
}
這就是我在日志中得到的
type = commentCommented
dp = default.jpg
name = testt
postimg = 69663rocketleague32bitdx914102018180636.mp4
type = commentCommented
dp = default.jpg
name = testt
postimg = 69663rocketleague32bitdx914102018180636.mp4
type = followed
dp = default.jpg
name = bott1
type = followed
dp = default.jpg
name = bott2
我嘗試打印通知變量,它為空。 我嘗試打印notifiArray返回為[]
該數組聲明為
var notifiArray = [Notification]()
任何想法為什么這種行為?
該語句不成功:
guard let whomenc:String = $0["whomenc"] as? String else {return}
或者是因為鍵"whomenc"
不存在,或者類型不是String
。 然后, guard
語句從閉包return
s,並且對該字典不執行任何操作。
由於即使某些值為nil
,您也可以創建Notification
,因此可以刪除guard
語句,並將(可能為nil
)值傳遞給Notification
初始化器:
obj.forEach {
let type = $0["type"] as? String
print("type = \(type ?? "nil")")
let dp = $0["dp"] as? String
print("dp = \(dp ?? "nil")")
let name = $0["name"] as? String
print("name = \(name ?? "nil")")
let postimg = $0["postimg"] as? String
print("postimg = \(postimg ?? "nil")")
let whomenc = $0["whomenc"] as? String
print("whomenc = \(whomenc ?? "nil")")
let notification = Notification(type: type, dp: dp, name: name, postImage: postimg, whomenc: whomenc)
self.notifiArray.append(notification)
print("notifiArray.count = \(self.notifiArray.count)") // this satement doesn't gets executed.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.