Swift 3 NSArray与零相比
我正在尝试将一个objc项目迁移到swift3。我不确定如何将数组与nil进行比较。我找到了这个主题,但那是两年前的事了,swift的语法已经改变了很多 如果我在swift中有这样的代码:Swift 3 NSArray与零相比,swift,xcode,variables,Swift,Xcode,Variables,我正在尝试将一个objc项目迁移到swift3。我不确定如何将数组与nil进行比较。我找到了这个主题,但那是两年前的事了,swift的语法已经改变了很多 如果我在swift中有这样的代码: let variable = something as? NSArray if variable == nil { // do something } 它不允许我将此变量与nil进行比较,从而导致错误“比较此变量时,始终返回false”。我尝试过将variable.description与“
let variable = something as? NSArray
if variable == nil {
// do something
}
它不允许我将此变量与nil进行比较,从而导致错误“比较此变量时,始终返回false”。我尝试过将variable.description与“”进行比较,但它是否也有相同的作用?
我所说的“某物”是指:
我想做的主要事情是:
var variable = dict.object(forKey: someString) as! NSArray
if variable == nil {
//create
}
else {
// append
}
这就是可选的展开语法的用途。可以将展开和强制转换合并到一个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"]
这就是可选的展开语法的用途。可以将展开和强制转换合并到一个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"]
使用此声明,变量
将是可选类型(NSArray?
),并且永远不会为零。这是因为将转换为?
会返回一个可选值,该值要么包含已成功转换的对象,要么不包含任何内容。您可以通过alt单击Xcode中的变量名来查看这一点
如果要知道它是否包含值,需要使用If let
语法:
if let variable = variable {
// variable is guaranteed to be an NSArray here.
}
使用此声明,变量
将是可选类型(NSArray?
),并且永远不会为零。这是因为将转换为?
会返回一个可选值,该值要么包含已成功转换的对象,要么不包含任何内容。您可以通过alt单击Xcode中的变量名来查看这一点
如果要知道它是否包含值,需要使用If let
语法:
if let variable = variable {
// variable is guaranteed to be an NSArray here.
}
您也可以将此格式与
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 Array
您也可以将此格式与
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 Array
该行表示变量为,且必须为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 {
这就是警告的来源。变量不能为零,因为变量不是可选的
您可能想要的是:
if let variable = dict.object(forKey:someString) as? NSArray
如果出现以下情况,则返回false:
返回一个nil对象dict.object(forKey:someString)
- 返回的对象不是NSArray
变量
现在是一个非可选的NSArray。它保证是一个NSArray,并且保证不为nil
。您可以使用它而无需展开它。e、 g
该行表示变量为,且必须为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 {
这就是警告的来源。变量不能为零,因为变量不是可选的
您可能想要的是:
if let variable = dict.object(forKey:someString) as? NSArray
如果出现以下情况,则返回false:
返回一个nil对象dict.object(forKey:someString)
- 返回的对象不是NSArray
变量
现在是一个非可选的NSArray。它保证是一个NSArray,并且保证不为nil
。您可以使用它而无需展开它。e、 g
请您也向我们展示一下您是如何定义
某物的
好吗?Swift中基本上不使用NSArray
的可能重复项。您正在丢弃类型信息。使用always SwiftArray
。如果稍后阻塞,您可能希望能够在该之外使用变量
,对吗?@Vadian因此它意味着应该始终使用数组、字符串、日期等,而不是NSArray、NSString、,NSDate?您能否向我们展示一下您是如何定义某物的
请?基本上不在Swift中使用NSArray
的可能重复项。您正在丢弃类型信息。使用always SwiftArray
。如果稍后阻塞,您可能希望能够在该之外使用变量
,对吗?@Vadian因此它意味着应该始终使用数组、字符串、日期等,而不是NSArray、NSString、,NSDate?是不是nil
编译器翻译成可选的文本值。none
?好了,您可以随时将可选值与nil
进行比较。nil
不是编译器转换为可选值的文本值吗?无
?好的,你可以随时将可选项与nil
进行比较。我不记得了,现在无法检查它。但如果我是对的话,那是和object forkey有关的。明天我会试试这个。还有一件事,如果“variable”为零,我可以键入else语句来回答您的问题。我说的“something”是指->var variable=dict.object(forKey:someString)as!恩萨雷。它改变了什么,或者我仍然可以用你的例子吗?我不记得了,现在无法检查。但如果我是对的话,那是和object forkey有关的。明天我会试试这个。还有一件事,如果“variable”为零,我可以键入else语句来回答您的问题。我说的“something”是指->var variable=dict.object(forKey:someString)as!恩萨雷。它改变了什么,或者我仍然可以用你的例子吗?但首先,我需要它是一个零。因为它第一次创建列表时,所有其他时间都只是附加数组。然后只需要一个else子句。看看我的最新答案。但首先,我需要它是零。因为它第一次创建列表时,所有其他时间都只是附加数组。然后