如何快速检查对象是否为零?

Dha*_*esh 39 swift

假设我有像这样的字符串:

var abc : NSString = "ABC"
Run Code Online (Sandbox Code Playgroud)

我想检查它是否为零,为此我尝试:

if abc == nil{

        //TODO:

    }
Run Code Online (Sandbox Code Playgroud)

但这不起作用并给我一个错误.错误说:

Can not invoke '=='with an argument list of type '(@|value NSString , NilLiteralConvertible)' 
Run Code Online (Sandbox Code Playgroud)

对此有何解决方案?

sap*_*api 62

如果abc是可选的,那么通常的方法是尝试在if语句中解包它:

if let variableName = abc { // If casting, use, eg, if let var = abc as? NSString
    // variableName will be abc, unwrapped
} else {
    // abc is nil
}
Run Code Online (Sandbox Code Playgroud)

但是,要回答您的实际问题,您的问题是您正在键入变量,使其永远不可选.

请记住,在Swift中,nil这个值只适用于选项.

由于您已将变量声明为:

var abc: NSString ...
Run Code Online (Sandbox Code Playgroud)

它不是可选的,也不可以nil.

尝试将其声明为:

var abc: NSString? ...
Run Code Online (Sandbox Code Playgroud)

或者让编译器推断出类型.


Ani*_*are 9

abc == nil当你声明一个var并且想要强制解包然后检查null时,会使用if的情况.在这里你知道这可以nil,你可以检查if != nil使用NSString基础的功能.

如果String?你不知道在运行时包装什么,因此你必须使用if-let并执行检查.

你正在做以下但没有"!".希望这清除它.

从苹果文档看这个:

let assumedString: String! = "An implicitly unwrapped optional string."
Run Code Online (Sandbox Code Playgroud)

您仍然可以将隐式解包的可选项视为普通可选项,以检查它是否包含值:

if assumedString != nil {
    println(assumedString)
}
// prints "An implicitly unwrapped optional string."
Run Code Online (Sandbox Code Playgroud)


小智 6

Swift 中的 Guard 关键字确实很好地完成了 null 检查。它提高了代码的可读性,并且在 nil 检查后,如果您想使用变量,它们的范围仍然可用。

func setXYX -> Void{

     guard a != nil  else {
        return;
    }

    guard  b != nil else {
        return;
    }

    print (" a and b is not null");
}
Run Code Online (Sandbox Code Playgroud)


Adi*_*ane 5

我最后编写了用于零检查的效用函数

func isObjectNotNil(object:AnyObject!) -> Bool
{
    if let _:AnyObject = object
    {
        return true
    }

    return false
}
Run Code Online (Sandbox Code Playgroud)

相同的工作和代码看起来干净!

用法

var someVar:NSNumber? 

if isObjectNotNil(someVar)
{
   print("Object is NOT nil")
}
else
{
   print("Object is nil")
}
Run Code Online (Sandbox Code Playgroud)

  • +2,因为 +1 是不允许的:) (2认同)