如何檢查NSDictionary或NSMutableDictionary是否包含密鑰?

我須要檢查dict是否有密鑰。 怎麼樣? 數組


#1樓

是。 這種錯誤很常見,致使應用程序崩潰。 因此我用它在每一個項目中添加NSDictionary,以下所示: this

//.h文件代碼: spa

@interface NSDictionary (AppDictionary)

- (id)objectForKeyNotNull : (id)key;

@end

//.m文件代碼以下 .net

#import "NSDictionary+WKDictionary.h"

@implementation NSDictionary (WKDictionary)

 - (id)objectForKeyNotNull:(id)key {

    id object = [self objectForKey:key];
    if (object == [NSNull null])
     return nil;

    return object;
 }

@end

在代碼中,您可使用以下: 調試

NSStrting *testString = [dict objectForKeyNotNull:@"blah"];

#2樓

一個很是討厭的問題,只是浪費了個人一些時間調試 - 你可能會發現本身提示自動完成嘗試使用彷佛工做的doesContaincode

除此以外, doesContain使用一個ID比較,而不是使用哈希比較objectForKey因此,若是你有字符串鍵的字典將返回NO的doesContain對象

NSMutableDictionary* keysByName = [[NSMutableDictionary alloc] init];
keysByName[@"fred"] = @1;
NSString* test = @"fred";

if ([keysByName objectForKey:test] != nil)
    NSLog(@"\nit works for key lookups");  // OK
else
    NSLog(@"\nsod it");

if (keysByName[test] != nil)
    NSLog(@"\nit works for key lookups using indexed syntax");  // OK
else
    NSLog(@"\nsod it");

if ([keysByName doesContain:@"fred"])
    NSLog(@"\n doesContain works literally");
else
    NSLog(@"\nsod it");  // this one fails because of id comparison used by doesContain

#3樓

更新的Objective-C和Clang版本具備現代語法: 字符串

if (myDictionary[myKey]) {

}

您沒必要檢查與nil的相等性,由於只有非零的Objective-C對象能夠存儲在字典(或數組)中。 而且全部Objective-C對象都是真實的值。 甚至@0 @NO@0[NSNull null]評估爲true。 get

編輯:斯威夫特如今是一個東西。 it

對於Swift,你會嘗試相似下面的內容

if let value = myDictionary[myKey] {

}

若是myKey在dict中,則此語法僅執行if塊,若是是,則將值存儲在value變量中。 請注意,這適用於0等虛假值。


#4樓

使用Swift,它將是:

if myDic[KEY] != nil {
    // key exists
}

#5樓

若是密鑰不存在, objectForKey將返回nil。

相關文章
相關標籤/搜索