如何检查一个变量是否为nil

7
我有一个变量。
var a: [AnyObject? -> Void] 

我正在使用append方法向其中添加数据。现在我想检查变量是否为nil。我尝试使用[],但不起作用,还尝试了"",也不起作用,请问这个变量的含义是什么,如何检查它是否为nil。


也许你只是想检查该数组是否为空? - rintaro
是的,我想检查它是否为空。 - user2413621
6个回答

16
据我所知,变量a是一个函数数组,这些函数接受任意类型的可选对象作为参数,并返回void。因此,这些函数的参数是可选的,但是数组本身不是可选的:它不能为nil,否则它将被声明为[AnyObject? -> Void]?,对吧? 编辑:如果你将a声明为可选的(但你为什么要这样做?)-添加一个-你可以使用if let来检查它的存在性:
if let b = a {
// a not nil, do some stuff
} else {
// a is null
}

如果你只想检查数组是否为空,请使用 Swift 数组的 isEmpty 方法。


如果我想检查它是否为nil,我应该怎么做? - user2413621
正如@Vinzzz所写,以那种方式定义,*它不能为nil*。 - DeFrenZ

7

更新:Xcode 7.3 Swift 2.2

如果您想检查一个变量是否为空,您应该使用 if let 来解包。没有必要创建第二个变量。

let str = "123"
var a = Int(str)        
if let a = a {
    print(a)
}

或者

if let a = Int(str) {
    print(a)
}

2

在Swift中,nil不是指针——它是某个类型值的缺失。任何类型的可选项都可以设置为nil,而不仅仅是对象类型。

因此,您可以使用以下代码进行检查:

let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()

if convertedNumber != nil {
    println("convertedNumber contains some integer value.")
}
// prints "convertedNumber contains some integer value."

请参考关于 nil 的内容以获取更多信息。

2

在Swift 3.0中

if let imageURL = dictObj["list_image"] as? String {
   print(imageURL)
}

你可以通过解释答案的工作原理以及如何改善提问者的情况来提高答案的质量。此外,你还没有回答问题的一部分,即他们问“有谁能告诉我这个变量的含义”。 - toonice
请不要重复你的答案:http://stackoverflow.com/a/43363148/2415822,http://stackoverflow.com/a/43363066/2415822 - JAL

1

您可以使用if let。if let是Swift中的一种特殊结构,允许您检查Optional是否包含一个值,并在它包含一个值时对其进行操作。

var a:Int=0
if let b=a{
   println(a)
} else {
   println("Value - nil")
}

但是对于字符串,您也可以使用.isEmpty(),如果已将其初始化为""

var str:String=""
if !str.isEmpty(){
   println(str)
}

0
对我来说,当我使用AVFoundation对象时,上面的解决方案都没有起作用。
当我尝试if (audioDeviceInput)时,会出现“类型'AVCaptureDeviceInput不符合协议'BooleanType'”的提示。 当我尝试使用“Binary operator'!='”时,则会出现“无法将'AVCaptureDeviceInput'和'nil'的操作数应用于二进制运算符'!='” 的提示。
在我的情况下,解决方案是……
if (audioDeviceInput.isEqual(nil))

nil 就像其他指针一样,可以被引用,这就是为什么它能够工作的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接