簡體   English   中英

為什么這個帶有可選值的結構什么都不返回?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM