将 nil 分配给 Objective-C 中 NSMutableDictionary 上的一个元素会删除该元素,这是一个被认可的功能还是错误?
Assigning nil to an element on NSMutableDictionary in Objective-C removes that element, is that a sanctioned feature or bug?
我有一个NSMutableDictionary
。
NSMutableDictionary * dict = @{
@"0" : @"car",
@"1" : @"ball",
@"2" : @"plane",
}
有一次,我错误地将 nil 赋给了字典中的一个元素。例如:
dict[@"1"] = nil;
令我惊讶的是,元素“1”没有崩溃,而是被删除了。
这是最近的事情吗?批准的功能还是错误?我想知道这是否是一个功能,因为我总是使用类似
的东西
[dict removeObjectForKey:@"1"];
从字典中删除对象。
我从来不知道这是可能的。也许 Apple 正在使 Objective-C 类似于 Swift。
我刚刚验证了 Swift 2.0 中的行为。
var dict: NSMutableDictionary = [ "0" : "car", "1" : "ball", "2" : "plane" ];
dict["1"] = nil
print("\(dict)")
这肯定是一个错误,因为它与文档相矛盾。
来自NSMutableDictionary Class Reference:
- setObject:forKeyedSubscript:
Adds a given key-value pair to the dictionary.
Declaration
OBJECTIVE-C
- (void)setObject:(ObjectType)object
forKeyedSubscript:(id)aKey
Parameters
object
The value for aKey. A strong reference to the object is maintained by the dictionary.
IMPORTANT
Raises an NSInvalidArgumentException if anObject is nil. If you need to represent a nil value in the dictionary, use NSNull.
aKey
The key for value. The key is copied (using copyWithZone:; keys must conform to the NSCopying protocol). If aKey already exists in the dictionary, anObject takes its place.
IMPORTANT
Raises an NSInvalidArgumentException if aKey is nil.
更新:2016-04-21
Apple 已更新其文档!传递 nil
值可用于删除键。
object
The value for aKey. A strong reference to the object is maintained by the dictionary.
Passing nil will cause any object corresponding to aKey to be removed from the dictionary.
有不同的 API 可以将对象添加到可变字典中,当您传递 nil
:
时,它们的行为会有所不同
setObject:forKeyedSubscript:
(a.k.a dict[key] = nil
) 和 setValue:forKey:
接受 nil
,在这种情况下,他们将删除与该键对应的关联对象。
如果传递 setObject:forKey:
将引发异常
所有这些都记录在 https://developer.apple.com/documentation/foundation/nsmutabledictionary
中
我有一个NSMutableDictionary
。
NSMutableDictionary * dict = @{
@"0" : @"car",
@"1" : @"ball",
@"2" : @"plane",
}
有一次,我错误地将 nil 赋给了字典中的一个元素。例如:
dict[@"1"] = nil;
令我惊讶的是,元素“1”没有崩溃,而是被删除了。
这是最近的事情吗?批准的功能还是错误?我想知道这是否是一个功能,因为我总是使用类似
的东西[dict removeObjectForKey:@"1"];
从字典中删除对象。
我从来不知道这是可能的。也许 Apple 正在使 Objective-C 类似于 Swift。
我刚刚验证了 Swift 2.0 中的行为。
var dict: NSMutableDictionary = [ "0" : "car", "1" : "ball", "2" : "plane" ];
dict["1"] = nil
print("\(dict)")
这肯定是一个错误,因为它与文档相矛盾。
来自NSMutableDictionary Class Reference:
- setObject:forKeyedSubscript: Adds a given key-value pair to the dictionary.
Declaration
OBJECTIVE-C
- (void)setObject:(ObjectType)object
forKeyedSubscript:(id)aKeyParameters
objectThe value for aKey. A strong reference to the object is maintained by the dictionary.
IMPORTANTRaises an NSInvalidArgumentException if anObject is nil. If you need to represent a nil value in the dictionary, use NSNull.
aKeyThe key for value. The key is copied (using copyWithZone:; keys must conform to the NSCopying protocol). If aKey already exists in the dictionary, anObject takes its place.
IMPORTANTRaises an NSInvalidArgumentException if aKey is nil.
更新:2016-04-21
Apple 已更新其文档!传递 nil
值可用于删除键。
objectThe value for aKey. A strong reference to the object is maintained by the dictionary.
Passing nil will cause any object corresponding to aKey to be removed from the dictionary.
有不同的 API 可以将对象添加到可变字典中,当您传递 nil
:
setObject:forKeyedSubscript:
(a.k.adict[key] = nil
) 和setValue:forKey:
接受nil
,在这种情况下,他们将删除与该键对应的关联对象。
如果传递 setObject:forKey:
将引发异常
所有这些都记录在 https://developer.apple.com/documentation/foundation/nsmutabledictionary
中