我正在尝试将一个objc项目迁移到swift3。我不确定如何将数组与nil进行比较。我找到了this topic,但那是两年前的事了,swift的语法已经发生了很大的变化。
如果我在swift中有这样的代码:
let variable = something as? NSArray
if variable == nil {
// do something
}它不允许我将此变量与nil进行比较,从而导致错误“比较此变量,总是返回false”。我试过将variable.description与“”进行比较,但它做的是同样的事情吗?我说的“某件事”是指:
var variable = dict.object(forKey: someString) as! NSArray我想要做的主要事情是:
var variable = dict.object(forKey: someString) as! NSArray
if variable == nil {
//create
}
else {
// append
}发布于 2017-03-15 23:52:11
这就是可选的展开语法的用途。您可以将解包和强制转换合并到一个if语句中:
if let variable = something as? NSArray {
// variable is not nil and is an NSArray
// Now you can do something with it.
} else {
// Either something is nil or it is not able to be cast as an NSArray
// Handle this case.
}我还应该提到,如果您不需要在Objective-C中使用something,那么您应该使用Swift本机数组类型。这可以像这样声明:
let someArray = ["string1", "string2"]发布于 2017-03-16 16:34:35
这一行表明变量为,必须为 an NSArray。如果dict.object(forKey: someString)不是NSArray,这将导致崩溃
var variable = dict.object(forKey: someString) as! NSArray
// ^
// This exclamation mark means you are certain this is an NSArray
// Also, because there is no question mark after NSArray, this variable
// is not optional. It cannot be nil但是,您随后可以使用
if variable == nil {这就是警告的来源。该变量永远不能为optional,因为该变量不是nil
你可能想要的是:
if let variable = dict.object(forKey:someString) as? NSArray 如果满足以下条件,则返回false:
dict.object(forKey:someString)返回nil对象在此之后,variable现在是一个non-optional NSArray。它保证是一个NSArray,并且保证不是nil。您可以使用它,而不需要打开它。例如:
if let variable = dict.object(forKey:someString) as? NSArray {
for element in variable {
}
}
else {
//The dict doesn't contain the object yet. `variable` is nil
//Create a new array and add it to dict
let newArray = ["First Value"]
dict[someString] = newArray
}发布于 2017-03-16 00:58:57
您也可以在guard-else中使用此格式
guard let variable = something as? NSArray else {
// your variable is nil. Do something if needed
}
// your variable is available in this scope. Do something when variable contains Arrayhttps://stackoverflow.com/questions/42814598
复制相似问题