Неявное преобразование 'int' в 'id _Nonnull' запрещено с помощью ARC set bool для словаря [duplicate]

Эти странные цифры появляются из-за того, что компьютеры используют двоичную (базовую 2) систему счисления, а мы используем десятичную (базовую 10).

Есть большинство дробных чисел, которые не могут быть точно представлены в двоичном или десятичном или в обоих. Результат - округленное (но точное) число результатов.

104
задан Mykola 19 February 2016 в 11:36
поделиться

5 ответов

Вы используете NSNumber.

У него есть методы init ... и number ..., которые берут booleans, так же, как целые числа и т. д.

Из Ссылка на NSNumber :

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

и:

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

и:

// Returns the receiver’s value as a BOOL.
- (BOOL)boolValue
149
ответ дан radiovisual 24 August 2018 в 02:24
поделиться

Новый синтаксис с Apple LLVM Compiler 4.0

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

Синтаксис преобразует BOOL в NSNumber, что приемлемо для NSDictionary.

42
ответ дан Brian 24 August 2018 в 02:24
поделиться

Как указывалось jcampbell1 , теперь вы можете использовать литеральный синтаксис для NSNumbers:

NSDictionary *data = @{
                      // when you always pass same value
                      @"someKey" : @YES
                      // if you want to pass some boolean variable
                      @"anotherKey" : @(someVariable)
                      };
2
ответ дан Community 24 August 2018 в 02:24
поделиться

Попробуйте следующее:

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

Выход будет следующим:

Boolean имеет значение TRUE для «Pratik»

Boolean - FALSE для 'Sachin'

-2
ответ дан NSPratik 24 August 2018 в 02:24
поделиться

Если вы объявляете это как литерал и используете clang v3.1 или выше, вы должны использовать @NO / @YES, если вы объявляете его как литерал. Например,

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

Для получения дополнительной информации об этом:

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

16
ответ дан sabalaba 24 August 2018 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: