gpt4 book ai didi

ios - 合并字典 - 不兼容的类型错误

转载 作者:可可西里 更新时间:2023-11-01 03:07:10 24 4
gpt4 key购买 nike

几个小时以来,我一直在尝试合并两个 NSDictionaries。搜索了一下,发现可以使用[NSMutableDictionary addEntriesFromDictionary:]

    NSDictionary *areaAttributes = [[area entity] attributesByName];
NSDictionary *gpsAttributes = [[gps entity] attributesByName];

NSMutableDictionary *areaAttributesM = [areaAttributes mutableCopy];
NSMutableDictionary *gpsAttributesM = [gpsAttributes mutableCopy];

NSMutableDictionary *combinedAttributes = [areaAttributesM addEntriesFromDictionary:gpsAttributesM];

但是我得到了错误:

Initializing 'NSMutableDictionary *_strong' with an expression of incompatible type 'void'

所以这是说 [areaAttributesM addEntriesFromDictionary:gpsAttributesM] 返回 void?我的理解正确吗?为什么返回 void?

最佳答案

是的,你是对的。来自 the docs :

- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary

至于原因,很简单:在 Cocoa 中改变对象的函数通常返回 void,因此您可以轻松地将它们与返回不同对象的函数区分开来。

此外,没有理由mutableCopy gpsAttributes 字典;它只是用作 -[addEntriesFromDictionary:] 的参数,它不需要是可变的。

所以,正确的做法是:

NSDictionary *areaAttributes = [[area entity] attributesByName];
NSDictionary *gpsAttributes = [[gps entity] attributesByName];

NSMutableDictionary *combinedAttributes = [areaAttributes mutableCopy];
[combinedAttributes addEntriesFromDictionary:gpsAttributes];

如果您经常这样做,您可能希望将其包装在一个函数中(或 NSDictionary 类别中的一个方法):

NSDictionary *mergeDictionaries(NSDictionary *lhs, NSDictionary *rhs) {
NSMutableDictionary *ret = [lhs mutableCopy];
[ret addEntriesFromDictionary:rhs];
return ret;
}

关于ios - 合并字典 - 不兼容的类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14328510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com