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

标签 ios swift

我正在编写 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/

相关文章:

swift - 在 Swift 中从按钮标题转换 double

ios - 在 swift 的嵌套闭包中正确放置捕获列表

ios - iOS 8 启动图像是否必须具有 LaunchScreen.xib?

ios - NSUserDefaults.standardUserDefaults().dictionaryForKey() 返回编译错误

ios - AWS Cognito 匿名/ guest 用户的 IdentityId 更改

swift - 使用 swift 将 View 加载到 NSContainerView 中

与 Parse Cloud 代码通信的 Swift/Stripe 错误

ios - 导航栏按钮 Action 调用失败

ios - 如何从 Camera ios 拍摄多张图像

swift - 用 SKScene 和 SKActions 替换 CALayer 和 CABasicAnimation