我的应用程序中有一个类,用户输入值并将它们设置为该类的实例,然后我将此数据上传到数据库,但我必须将该类转换为数据库接受的内容,并且我要转换为使用镜面反射的字典。我的类中的某些属性可以为零,因为根据设计,并非所有属性都是必需的。但我无法将零值传递给数据库。
我重新创建了我的示例,这是一个非常简化的游乐场。我没有为类的 name 属性设置值
在将键值对添加到字典之前我尝试检查 nil
下面是我的代码
import UIKit
class Color: NSObject {
var name: String?
var code: Int?
var shade: String?
}
let cl = Color()
cl.code = 3456
cl.shade = "DARK"
var colorDict = [String: Any]()
for x in Mirror(reflecting: cl).children.makeIterator() {
if let val = x.value as Any? {
print(type(of: val))
colorDict[x.label!] = val
}
}
print (colorDict)
控制台中的输出如下
Optional<String>
Optional<Int>
Optional<String>
["name": nil, "code": Optional(3456), "shade": Optional("DARK")]
我如何检查 nil 值并跳过将该属性添加到字典中
在添加包括 nils 在内的所有值并检查值后,我尝试循环遍历字典,但我收到以下警告
将“Any”类型的非可选值与 nil 进行比较始终返回 false
声明字典如下
var colorDict = [String: Any?]()
for x in colorDict {
if x.value == nil {
colorDict.removeValue(forKey: x.key)
}
}
删除警告但不会删除任何内容。
我将衷心感谢您的帮助。
类型对象的展开方式Any
包含选项有点奇怪,但你可以检查镜子中的值是否为 nil,如下所示:
for x in Mirror(reflecting: cl).children {
if case Optional<Any>.some(let val) = x.value {
print(type(of: val))
colorDict[x.label!] = val
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)