NSDictionary nasıl boolean değer ekleyebilirim?


112

Tamsayılar için kullanırdım NSNumber. Ama EVET ve HAYIR nesneler değil sanırım. Afaik Sadece bir nesneye nesne ekleyebilirim NSDictionary, değil mi?

Booleanlar için herhangi bir sarmalayıcı sınıfı bulamadım. Var mı?

Yanıtlar:


156

NSNumber kullanırsınız.

Init ... ve number ... boolean alan yöntemleri vardır, tıpkı tamsayılar gibi.

Gönderen NSNumber sınıf referansı :

// Creates and returns an NSNumber object containing a 
// given value, treating it as a BOOL.
+ (NSNumber *)numberWithBool:(BOOL)value

ve:

// Returns an NSNumber object initialized to contain a
// given value, treated as a BOOL.
- (id)initWithBool:(BOOL)value

ve:

// Returns the receiver’s value as a BOOL.
- (BOOL)boolValue

Harika! Sanırım dahili olarak bool'u 0/1 olarak saklıyor?
Teşekkürler

5
@harms doğru. Örnek olarak: NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"someKey", nil];
So Over It

29
Şimdi NSNumbers için gerçek bir sözdizimi olduğuna dikkat çekmek önemlidir. @YESile aynı[NSNumber numberWithBool:YES]
jcampbell1

51

Beri yeni sözdizimi Apple LLVM Compiler 4.0

dictionary[@"key1"] = @(boolValue);
dictionary[@"key2"] = @YES;

Sözdizimi dönüştürür BOOLiçin NSNumberkabul edilebilir, NSDictionary.


16

Eğer bunu birebir olarak ilan ediyorsanız ve clang v3.1 veya üstünü kullanıyorsanız, bunu birebir olarak ilan ediyorsanız @NO / @YES kullanmalısınız. Örneğin

NSMutableDictionary* foo = [@{ @"key": @NO } mutableCopy];
foo[@"bar"] = @YES;

Bununla ilgili daha fazla bilgi için:

http://clang.llvm.org/docs/ObjectiveCLiterals.html


1
Derleyici hatası alın: NSMutableDictionary * 'yi NSDictionary türünde bir ifade ile başlatan uyumsuz işaretçi türleri. Bunun yerine bildirimi NSDictionary olarak değiştirirseniz, derleyici hatası alın: NSDictionary * türündeki nesnede bulunmayan sözlük öğesini yazmak için beklenen yöntem
Tony

1
Değişmez NSDictionary, bir değil , yalnızca bir oluşturur NSMutableDictionary. Değişebilir @YESolmadığı foo[@"bar"]için atama yapmak mümkün @{ @"key": @NO }değildir.
redhotvengeance

3

Jcampbell1'in belirttiği gibi , artık NSNumbers için değişmez sözdizimini kullanabilirsiniz:

NSDictionary *data = @{
                      // when you always pass same value
                      @"someKey" : @YES
                      // if you want to pass some boolean variable
                      @"anotherKey" : @(someVariable)
                      };

-2

Bunu dene:

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setObject:[NSNumber numberWithBool:TRUE]  forKey:@"Pratik"];
[dic setObject:[NSNumber numberWithBool:FALSE] forKey:@"Sachin"];

if ([dic[@"Pratik"] boolValue])
{
    NSLog(@"Boolean is TRUE for 'Pratik'");
}
else
{
    NSLog(@"Boolean is FALSE for 'Pratik'");
}

if ([dic[@"Sachin"] boolValue])
{
    NSLog(@"Boolean is TRUE for 'Sachin'");
}
else
{
    NSLog(@"Boolean is FALSE for 'Sachin'");
}

Çıktı aşağıdaki gibi olacaktır:

Boole ise DOĞRU 'için ratik '

Boole, ' Sachin için YANLIŞ '


1
Ayrıca yapabilirsiniz [NSNumber numberWithBool:NO]ve [NSNumber numberWithBool:YES].
Alex Zavatone
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.