gpt4 book ai didi

swift - 希望从 `Any` 的 `valueForKeyPath` 值中清除此 switch 语句

转载 作者:搜寻专家 更新时间:2023-11-01 07:08:31 24 4
gpt4 key购买 nike

基本上我使用的是 KVC,并可能返回不同的值类型,并希望根据类型创建一个 switch 语句

我在这里尝试了答案,但它无法编译: Swift: Test class type in switch statement

        var value: String = "Unknown"
switch node.value(forKeyPath: keyPath) {
case let numberValue is NSNumber:
if numberValue == 0 {
value = "No"
} else if numberValue == 1 {
value = "Yes"
}
case let stringValue is String:
value = stringValue
default:
break
}

它说

"Pattern variable binding cannot appear in an expression"

"Cast from <> to unrelated 'NSNumber' always fails"

这里的代码对我有用:

        var value: String = "Unknown"
let nodeValue = node.value(forKeyPath: keyPath)
switch nodeValue {
case is NSNumber:
if let numberValue = nodeValue as? NSNumber {
if numberValue == 0 {
value = "No"
} else if numberValue == 1 {
value = "Yes"
}
}
case is String:
if let stringValue = nodeValue as? String {
value = stringValue
}
default:
break
}

但我需要使用可选绑定(bind)来对新变量进行类型转换似乎有点不理想

有更好的方法吗?

最佳答案

一种模式匹配和一次性转换的方法,我认为它实际上很干净:

switch nodeValue {
case let number as NSNumber:
switch number {
case 0: value = "No"
case 1: value = "Yes"
default: break
}
case let string as String:
value = string
default: break
}

关于swift - 希望从 `Any` 的 `valueForKeyPath` 值中清除此 switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46535829/

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