我正在编写 swift 代码并遇到一个简单的问题。
我声明了一个MSMutableArray
,在特定条件下,我将它设置为nil
:
func doJob() -> NSMutableArray {
var arr = NSMutableArray()
arr = addContentToArray()
if CRITICAL_CONDITION {
//ERROR: Cannot assign a value of type 'nil' to a value of type 'NSMutableArray'
arr = nil
}
return arr
}
但是当我将 arr
设置为 nil
时,出现编译错误:
Cannot assign a value of type 'nil' to a value of type 'NSMutableArray'
为什么?那么我怎样才能将它设置为零呢?
最佳答案
您只能将nil
分配给可选变量。但是,当您让类型被推断时,编译器不知道您打算在将来分配 nil
:
var arr: NSMutableArray? = NSMutableArray()
但是,将 nil
赋值给一个以前保存数组的变量的整个事情对我来说似乎有点脏。也许使用新变量会更容易?
您还没有发布您的真实代码,因此我们无法进行真正的审查,但是:
if CRITICAL_CONDITION {
arr = nil
}
return arr
可以更容易地写成
if CRITICAL_CONDITION {
return nil
}
return arr
这也将解决问题,因为您不需要重新分配变量。另一种方法是使用第二个变量:
var result: NSArray? = array
if CRITICAL_CONDITION {
result = nil
}
return result
甚至更好
let result = CRITICAL_CONDITION ? nil: array
return result;
指定变量何时不能为 nil
(非可选)的全部意义在于可选变量是危险的,您必须检查它们是否全部为 nil
时间。因此,只在短时间内使用可选项,最好是一个条件,然后将它们转换为非可选。在这种情况下,尽可能长时间地使用非可选变量,并且仅当您确实需要分配 nil
时,才将其转换为可选变量(声明第二个可选变量)。
关于ios - 无法将类型 'nil' 的值分配给类型 'NSMutableArray' 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32476238/