[英]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`
}
您的應用程序崩潰,因為參數收到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.