我在写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
赋值给可选变量。但是,当您让类型被推断时,编译器不知道您计划在将来分配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
时才将其转换为可选变量(声明第二个可选变量)。