簡體   English   中英

如何在 swift 中檢查 object 是否為零?

[英]How to check object is nil or not in swift?

假設我有這樣的字符串:

var abc : NSString = "ABC"

我想檢查它是否為零,為此我嘗試:

if abc == nil{

        //TODO:

    }

但這不起作用並給我一個錯誤。 錯誤說:

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

有什么解決辦法嗎?

如果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? ...

或者讓編譯器推斷類型。

if abc == nil情況在您聲明一個 var 並想要強制解包然后檢查 null 時使用。 在這里你知道這可以是nil並且你可以檢查if != nil使用來自 Foundation 的NSString函數。

String?情況下String? 您不知道在運行時包裝了什么,因此您必須使用 if-let 並執行檢查。

您正在執行以下操作但沒有“!”。 希望這可以清除它。

從蘋果文檔看這個:

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

您仍然可以將隱式解包的可選項視為普通可選項,以檢查它是否包含值:

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

我最終為 nil check 編寫了實用函數

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")
}

在 swift 中使用 guard 關鍵字可以很好地進行空檢查。 它提高了代碼的可讀性,如果你想使用它們,在 nil 檢查之后變量的范圍仍然可用。

func setXYX -> Void{

     guard a != nil  else {
        return;
    }

    guard  b != nil else {
        return;
    }

    print (" a and b is not null");
}
if (MyUnknownClassOrType is nil) {
    println("No class or object to see here")
}

Apple 還建議您使用它來檢查從以前的框架中折舊和刪除的類。

這是來自 Apple 開發人員的確切報價:

是的。 如果當前運行的操作系統沒有實現該類,則該類方法將返回 nil。

希望這可以幫助 :)

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"
    }
}

此函數檢查任何類型的對象,如果對象無效,則返回該類型對象的默認值。

通常,我只想知道對象是否為零。

所以我使用這個函數,當輸入的對象有效時返回true ,無效時返回false

func isNotNil(someObject: Any?) -> Bool {
        if someObject is String {
            if (someObject as? String) != nil {
                return true
            }else {
                return false
            }
        }else if someObject is Array<Any> {
            if (someObject as? Array<Any>) != nil {
                return true
            }else {
                return false
            }
        }else if someObject is Dictionary<AnyHashable, Any> {
            if (someObject as? Dictionary<String, Any>) != nil {
                return true
            }else {
                return false
            }
        }else if someObject is Data {
            if (someObject as? Data) != nil {
                return true
            }else {
                return false
            }
        }else if someObject is NSNumber {
            if (someObject as? NSNumber) != nil{
                return true
            }else {
                return false
            }
        }else if someObject is UIImage {
            if (someObject as? UIImage) != nil {
                return true
            }else {
                return false
            }
        }
        return false
 }

斯威夫特 4.2

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

    return false
}

用法

if isValid(selectedPost)
{
    savePost()
}

Swift 的簡短表達:

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

或者:

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

或兩者:

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

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)")
        }
    }

Swift 4你不能將 Any 與 nil 進行比較。因為一個 optional 可以是 nil,因此它總是成功為 true。 唯一的方法是將其轉換為您想要的對象並將其與 nil 進行比較。

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

Swift 5

碰撞

您的應用程序崩潰,因為參數收到null ,並在 NSException 中中斷。

if let parameters = parameters {
    httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
}

解決方案

if let parameters = parameters, JSONSerialization.isValidJSONObject(parameters) {
    httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM