gpt4 book ai didi

swift - NSNumber 作为一个可选的,即使它没有被声明为一个

转载 作者:行者123 更新时间:2023-11-28 11:20:16 24 4
gpt4 key购买 nike

我有一个数字存储在 swift 字典中。我正在使用 NSNumber,因为我必须序列化为 JSON。我很困惑为什么下面的第 5 行不起作用而第 6 行起作用。 currentCt似乎认为它是一个可选的,然而,在第 1 行它没有在 Dictionary<String, NSNumber>() 中声明为可选 a有什么想法吗?

此外,我不确定为什么桥接不允许自动添加 Int 和 NSNumber,我必须求助于使用 Int(currentCt!) 。同样,非常感谢任何想法。

var activeMinDic = Dictionary<String, NSNumber>()
activeMinDic["1"] = 5
var currentCt = activeMinDic[String(1)]
activeMinDic[String(1)] = 1 + 1 // works fine
activeMinDic[String(1)] = 1 + currentCt // does not work
activeMinDic[String(1)] = 1 + Int(currentCt!) // works

最佳答案

您遇到的问题并非特定于 NSNumber。这是因为 Swift 字典返回一个可选的,因为它们的键可能不存在于字典中。

所以这一行:

var currentCt = activeMinDic[String(1)]

是这个的简写:

var currentCt: NSNumber? = activeMinDic[String(1)]

您必须以某种方式从 key 获取中解包返回值,例如:

// default to an NSNumber of 0 if not present
let currentCt = activeMinDic[String(1)] ?? 0

// or require it:
if let currentCt = activeMinDic[String(1)] {
// use currentCt
}
else {
// handle currentCt not being present
}

关于桥接——没有从 NSNumber 到其他数字类型的隐式转换。事实上,甚至没有用于两个 NSNumbers+。请记住,NSNumber 可以包含各种不同类型的数字表示,您可以使用 .floatValue.integerValue 等提取它们。Swift 作为语言非常严格(不像其他一些类似 C 的语言)不在不同类型之间隐式转换(避免隐式截断等所有相关问题)所以你需要显式声明要提取的数字(使用 . integerValue作为 Int,或使用 Intinit,就像您在此处所做的那样)。

关于swift - NSNumber 作为一个可选的,即使它没有被声明为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28822208/

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