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