如何将可选的 NSInteger 转换为非可选的?
How do I convert a optional NSInteger to a non-optional one?
我需要检索设置(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,所以
- 我在转换过程中是否漏掉了一些简单的东西?
- 是否有更好的方法从设置中检索 NSInteger?
将可空值转换为不可空值时,有。
但是对于你的情况,你有两个问题。一个是您要从中获取的数组 NSUserDefaults
是一个整数数组,因此您需要决定要从该数组中获取哪个数组。
如果是第一个,可以用first
属性。您可以使用可选链接来获取它。由于它是一个高分,如果它不存在,您可能希望默认为零。
这是一行:
let returnValue = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [Int]
let highscore = returnValue?.first ?? 0
关于上面的注意事项:如果类型由 =
右侧的内容明确确定,则无需提供 =
左侧的类型。而且最好选择 Int
而不是 NSInteger
。
returnValue?.first
说“如果 returnValue
是 nil
,那么 nil
,否则 first
的值(它本身,returns nil
如果数组为空)。” ??
表示“如果 ??
的左边是 nil
,那么 nil
右边的值,否则是左边的展开值”。
就是说 – 您真的是要存储数组吗?或者你真的只是想在默认值中存储一个整数然后直接把它取出来?
let highscore = NSUserDefaults.standardUserDefaults().integerForKey("food")
// and elsewhere in your code, when saving
NSUserDefaults.standardUserDefaults().setInteger(highscore, forKey: "food")
(integerForKey
已经 returns 不存在时默认为 0 而不是可选的,因此不需要任何解包)
我需要检索设置(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,所以
- 我在转换过程中是否漏掉了一些简单的东西?
- 是否有更好的方法从设置中检索 NSInteger?
将可空值转换为不可空值时,有
但是对于你的情况,你有两个问题。一个是您要从中获取的数组 NSUserDefaults
是一个整数数组,因此您需要决定要从该数组中获取哪个数组。
如果是第一个,可以用first
属性。您可以使用可选链接来获取它。由于它是一个高分,如果它不存在,您可能希望默认为零。
这是一行:
let returnValue = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [Int]
let highscore = returnValue?.first ?? 0
关于上面的注意事项:如果类型由 =
右侧的内容明确确定,则无需提供 =
左侧的类型。而且最好选择 Int
而不是 NSInteger
。
returnValue?.first
说“如果 returnValue
是 nil
,那么 nil
,否则 first
的值(它本身,returns nil
如果数组为空)。” ??
表示“如果 ??
的左边是 nil
,那么 nil
右边的值,否则是左边的展开值”。
就是说 – 您真的是要存储数组吗?或者你真的只是想在默认值中存储一个整数然后直接把它取出来?
let highscore = NSUserDefaults.standardUserDefaults().integerForKey("food")
// and elsewhere in your code, when saving
NSUserDefaults.standardUserDefaults().setInteger(highscore, forKey: "food")
(integerForKey
已经 returns 不存在时默认为 0 而不是可选的,因此不需要任何解包)