【发布时间】:2016-06-24 17:15:12
【问题描述】:
当我的应用程序在 NSData 变量中找到 nil 时,它有时会崩溃。当我试图解释错误时,它说“类型为“NSData”的值永远不能为零,不允许比较。
另外,我已经将data 字段初始化为var data = NSData(),所以我什至无法理解 nil 是从哪里来的。
if self.data != nil {
self.data = data!
.
.
.
}
【问题讨论】:
当我的应用程序在 NSData 变量中找到 nil 时,它有时会崩溃。当我试图解释错误时,它说“类型为“NSData”的值永远不能为零,不允许比较。
另外,我已经将data 字段初始化为var data = NSData(),所以我什至无法理解 nil 是从哪里来的。
if self.data != nil {
self.data = data!
.
.
.
}
【问题讨论】:
您混淆了实例变量和局部变量。
self.data 是实例变量,您已将其定义为非 nildata 是一个局部变量,可能是您调用的某个函数的返回值。它是可空的(即NSData?)如果我猜测一下,您的代码将如下所示:
class MyClas {
var data = NSData()
func someFunction() {
let data = anotherFunction() // This returns an NSData?
if self.data != nil {
....
}
}
}
改成这样:
if data != nil {
self.data = data!
}
您也可以使用可选绑定:
if let data = data {
// data is guaranteed to be non-nil in here
self.data = data
}
【讨论】:
您将self.data 与nil 进行比较,而不是data。因此,我怀疑您从未分配给self.data。
【讨论】:
if self.data != nil { self.data = NSData() }。但由于self.data在赋值前为nil,所以条件为假。