爲什麼以下NSDictionary
/NSMutableDictionary
調用會產生錯誤或警告?爲什麼通用NSDictionary不會提示有關錯誤鍵入的鍵/賦值?
我期望在這裏出現錯誤,因爲rhs NSDictionary
文字不符合012hlhs局部變量的通用類型。
NSDictionary<NSString *, NSNumber *> *foo = @{ @(42) : @"foo" };
我期待在這裏的錯誤,因爲密鑰類型不匹配NSMutableDictionary
的關鍵共性類型:
NSMutableDictionary<NSString *, NSNumber *> *foo = [NSMutableDictionary new];
// neither of these calls produces an error. :(
foo[@(42)] = @(42);
[foo setObject:@(42) forKey:@(42)];
我看到一個錯誤,當我嘗試分配不正確類型的值,所以我知道泛型錯誤有些工作:
NSMutableDictionary<NSString *, NSNumber *> *foo = [NSMutableDictionary new];
foo[@"foo"] = @"bar";
導致以下警告:
Foo.m:81:16: Incompatible pointer types sending 'NSString *' to parameter of type 'NSNumber * _Nullable'
爲什麼字面賦值或不正確類型的鍵會導致警告/錯誤?