2016-03-09 39 views
2

是否有警告我可以啓用停止分配數組和字典文字到泛型不匹配的變量?Objective-C泛型安全數組/字典文字

// I expect a warning here. 
// I'm assigning an NSArray<NSNumber *> to an NSArray<NSString *> 
NSArray<NSString *> *strings = @[@1, 
           @2, 
           @3, 
           ]; 

// I expect a warning here. 
// NSDictionary<NSNumber *, NSNumber *> to an 
// NSDictionary<NSString *, NSString *> 
NSDictionary<NSString *, NSString *> *stringsByString = @{@1 : @1, 
                  @2 : @2, 
                  @3 : @3, 
                  }; 

我創建了一個新的iOS項目與Xcode版本7.2(7C68),並沒有得到上述任務的警告。

我知道我可以分配創建可變集合和手動分配每個值,並獲得預期的警告:

NSMutableArray<NSString *> *strings = [NSMutableArray new]; 
[strings addObject:@1]; 

不兼容的指針類型發送「的NSNumber *」來 類型的參數「的NSString * _Nonnull」

NSMutableDictionary<NSString *, NSString *> *stringsByString = [NSMutableDictionary new]; 
stringsByString[@"1"] = @1; 

不相容指針類型發送「的NSNumber *'參數類型'NSString * _Nullable'

但我希望能更簡潔一些。

這整個問題比簡單地調用-\[NSMutableDictionary setObject:forKey:\which doesn't work更廣泛。

stringsByString[@2] = @"2"; 

回答

1

不,不存在Objective-C泛型中的類型推斷。因此,數組和字典文字不知道使用什麼上下文,並且必須允許任何東西作爲鍵和值。

+0

如果您可以鏈接到蘋果公司的某個人的文檔或官方文字(推特或電子郵件),我很樂意將其標記爲正確。 –