无法将 'nil' 类型的值分配给类型 'NSMutableArray' 的值



我在写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时才将其转换为可选变量(声明第二个可选变量)。

相关内容

最新更新