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

时间:2014-11-01 06:57:28

标签: swift

假设我有像:

这样的字符串
var abc : NSString = "ABC"

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

if abc == nil{

        //TODO:

    }

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

Can not invoke '=='with an argument list of type '(@|value NSString , NilLiteralConvertible)' 

对此有何解决方案?

10 个答案:

答案 0 :(得分:60)

如果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
}

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

请记住,在Swift中,nil是一个只能应用于选项的值。

因为您已将变量声明为:

var abc: NSString ...

它不是可选的,不能是nil

尝试将其声明为:

var abc: NSString? ...

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

答案 1 :(得分:8)

当您声明var并希望强制解包然后检查null时,使用if abc == nil的情况。您知道这可以是nil,您可以检查if != nil使用基金会的NSString函数。

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

您正在关注但没有“!”。希望这可以解决它。

从Apple docs看看:

let assumedString: String! = "An implicitly unwrapped optional string."

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

if assumedString != nil {
    println(assumedString)
}
// prints "An implicitly unwrapped optional string."

答案 2 :(得分:5)

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

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

    return false
}

同样的工作&代码看起来干净!

<强>用法

var someVar:NSNumber? 

if isObjectNotNil(someVar)
{
   print("Object is NOT nil")
}
else
{
   print("Object is nil")
}

答案 3 :(得分:2)

if (MyUnknownClassOrType is nil) {
    println("No class or object to see here")
}

Apple还建议您使用它来检查先前框架中的折旧和删除类。

以下是Apple开发人员的确切报价:

  

是。如果当前运行的操作系统没有实现该类,则类方法将返回nil。

希望这会有所帮助:)

答案 4 :(得分:1)

func isObjectValid(someObject: Any?) -> Any? {
    if someObject is String {
        if let someObject = someObject as? String {
            return someObject
        }else {
            return ""
        }
    }else if someObject is Array<Any> {
        if let someObject = someObject as? Array<Any> {
            return someObject
        }else {
            return []
        }
    }else if someObject is Dictionary<AnyHashable, Any> {
        if let someObject = someObject as? Dictionary<String, Any> {
            return someObject
        }else {
            return [:]
        }
    }else if someObject is Data {
        if let someObject = someObject as? Data {
            return someObject
        }else {
            return Data()
        }
    }else if someObject is NSNumber {
        if let someObject = someObject as? NSNumber{
            return someObject
        }else {
            return NSNumber.init(booleanLiteral: false)
        }
    }else if someObject is UIImage {
        if let someObject = someObject as? UIImage {
            return someObject
        }else {
            return UIImage()
        }
    }
    else {
        return "InValid Object"
    }
}

如果对象无效,此函数会检查任何类型的对象并返回对象类型的默认值。

答案 5 :(得分:1)

Normally, I just want to know if the object is nil or not.

So i use this function that just returns System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: Client found response content type of 'text/html; charset=UTF-8', but expected 'text/xml'. when the object entered is valid and true when its not.

false

答案 6 :(得分:0)

Swift 简短表达:

var abc = "string"
abc != nil ? doWork(abc) : ()

abc == nil ? () : abc = "string"

或两者:

abc != nil ? doWork(abc) : abc = "string"

答案 7 :(得分:0)

Swift 4.2

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

    return false
}

用法

if isValid(selectedPost)
{
    savePost()
}

答案 8 :(得分:0)

Swift-5非常简单的方法

//MARK:- In my case i have an array so i am checking the object in this
    for object in yourArray {
        if object is NSNull {
            print("Hey, it's null!")

        }else if object is String {
            print("Hey, it's String!")

        }else if object is Int {
            print("Hey, it's Int!")

        }else if object is yourChoice {
            print("Hey, it's yourChoice!")

        }
        else {
            print("It's not null, not String, not yourChoice it's \(object)")
        }
    }

答案 9 :(得分:0)

快捷键4 您不能将Any与nil进行比较。因为可选参数可以为nil,因此它总是成功。 唯一的方法是将其强制转换为所需的对象,然后将其与nil进行比较。

if (someone as? String) != nil
{
   //your code`enter code here`
}