gpt4 book ai didi

swift - 如何将可选的 NSInteger 转换为非可选的?

转载 作者:可可西里 更新时间:2023-11-01 00:37:37 25 4
gpt4 key购买 nike

我需要检索一个设置(使用 Swift):

var highScoreNumber: NSInteger = 0
var returnValue: [NSInteger]? = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [NSInteger]

if (returnValue != nil) {
highScoreNumber = returnValue as NSInteger
}

我尝试了这个代码和其他代码变体,我总是得到

'NSInteger?' not convertible to 'NSInteger'

这是我第一次接触 Swift,所以

  1. 我是否在转换过程中漏掉了一些简单的东西?
  2. 是否有更好的方法从设置中检索 NSInteger?

最佳答案

将可空值转换为不可空值时,有many good options to choose from .

但是对于您的情况,您有两个问题。一个是您从 NSUserDefaults 获取的数组是一个整数数组,因此您需要决定要从该数组中选择哪一个。

如果它是你想要的第一个,你可以使用 first属性(property)。您可以使用可选链接来获取它。由于它是一个高分,如果它不存在,您可能希望默认为零。

这是一行:

let returnValue = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [Int]

let highscore = returnValue?.first ?? 0

以上注意事项:=左边的类型不需要给出如果类型由 = 右侧的内容明确确定.最好选择IntNSInteger .

returnValue?.first说“如果returnValuenil , 然后 nil , 否则 first 的值(如果数组为空,它本身会返回 nil)。” ??说“如果 ?? 的左边是nil , 然后是 nil 右边的值, 否则是左边的展开值”。

也就是说——你真的是要存储一个数组吗?还是您真的只想在默认值中存储一个整数,然后直接将其取出?

let highscore = NSUserDefaults.standardUserDefaults().integerForKey("food")
// and elsewhere in your code, when saving
NSUserDefaults.standardUserDefaults().setInteger(highscore, forKey: "food")

(integerForKey 在不存在时已经返回默认值 0 而不是可选值,因此不需要任何解包)

关于swift - 如何将可选的 NSInteger 转换为非可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30406433/

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