gpt4 book ai didi

swift - 可选的任何?等于零

转载 作者:行者123 更新时间:2023-12-04 20:04:04 25 4
gpt4 key购买 nike

我有:

let value: Any? = myObject[keyPath: myParamKeyPath]

myParamKeyPath 指的是 String?

然后,当 myParam 应该是 nil 时,我有:

value == nil 返回 false

(value as?String?) == nil 返回 true

是否可以检查 value 是否等于 nil 而不必首先将其转换为 String??也许是将它与 NSNull 进行比较?

此外,我无法将 value 类型直接更改为 String?,因为它也用于我代码中的其他类型。

编辑:

(value as?String?) == nil 返回 true 确实无关紧要。但我仍然可以打印键路径指向的值,它实际上是 nil。所以我仍然不明白为什么 value == nil 返回 false 而我期望它是 true...

EDIT2 更多代码:

    let setting = appSettings.settings[indexPath.row]
let value = appSettings[keyPath: setting.keyPath]

let fontAwesome: FontAwesome

switch setting.keyPath {
case \PrinterSettings.printableImageIDs:
fontAwesome = blablabla
case \WeatherSettings.lockscreenImageIDs:
fontAwesome = blablabla
default:
if let value = value as? FakeButtonPlacementSubSettings {
fontAwesome = blablabla
} else {
fontAwesome = value != nil ? .checkSquareO : .squareO
}
}

我期待得到 fontAwesomeIcon = .squareO 但当 myObject[keyPath: myParamKeyPath] 指向的值是时我得到 checkSquareO String?(稍后它对另一个 Bool? 值做同样的事情)。我一定是在某处遗漏了什么......

编辑 3 截图: Screenshot

EDIT 4 进一步说明我在这里要做的事情:

首先,再次感谢您的帮助。

这里有两张关于我的项目当前设计的照片: User model Setting usecase

我在我的项目中使用 KVO。我之前为此使用了 objective-c 字符串 #keyPath。它工作得很好,但几乎我所有的模型都必须在@objc 中转换。所以我目前的目标是删除它并切换到新的 Swift 4 键路径系统。

要继续:我有一个用户类,其中包含很多设置(比屏幕截图上的更多),可以是多种类型(还有一些自定义类型)。

另一方面,我创建了大约 10 个“设置编辑器 View Controller ”:一个按设置类型分类。我想使用相同的设置编辑器 VC 来编辑每一个相同类型的设置。

例如,如果要编辑的设置是 bool 值,我想使用“boolean editor VC”并让我选择的设置由用户的新选择编辑。这就是我使用 KVO 系统的原因。如果你们对此有更好的解决方案,我不愿意保留它。然后它也会摆脱我的任何? == 无问题。

最佳答案

下面的怎么样?

struct S {
let x: String?
}

let v1: Any? = S(x: "abc")[keyPath: \S.x]
print(v1 is String? && v1 == nil) // false

let v2: Any? = S(x: nil)[keyPath: \S.x]
print(v2 is String? && v2 == nil) // true

关于swift - 可选的任何?等于零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48214421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com