如何将此obj-c代码转换为swift(带有NSDictionary的NSArray)

时间:2019-03-29 14:43:41

标签: objective-c swift

因此,我试图将一些obj-c代码转换为swift,但我遇到了这个问题,我不知道如何将其转换为swift。

如果我是正确的话,下面的几行内容如下:将dictionary[SOME_CONSTANT]的结果放入一个名为nameOfArray的新数组中,并根据{的值来制作一个名为nameOfDictionary的新字典。 {1}}。

dictionary[SOME_CONSTANT]

1 个答案:

答案 0 :(得分:0)

NSArray *nameOfArray = (NSArray*)dictionary[SOME_CONSTANT];
     

如果我是正确的话,下几行应如下所示:将dictionary[SOME_CONSTANT]的结果放入名为nameOfArray的新数组中

如果您了解Swift而不是Objective-C,您可能会认为数组是值类型,因此从一个数组到var的赋值将创建一个新数组。但是,在Objective-C数组中,数组是 reference 类型,并且分配NSArray *值不会创建新数组,它只是将引用复制到现有数组。

上面的代码行将与字典SOME_CONSTANT中的键dictionary关联的值复制到变量nameOfArray中,该值是对数组的引用。分配完成后,dictionary[SOME_CONSTANT]nameOfArray都引用 same 数组。

NSDictionary *nameOfDictionary = dictionary[SOME_CONSTANT];
     

并根据nameOfDictionary的值创建一个名为dictionary[SOME_CONSTANT]的新字典。

由于上面没有创建新的字典,因此该行与第一个字典的作用相同-它将存储在字典中的参考值复制到变量中,仅在这种情况下,该行说该值是对字典的引用

如果以上两行实际上是您的代码中的内容,而不是简化版本,则您有问题:第一行说dictionary[SOME_CONSTANT]的值为NSArray *,第二行说它的值为NSDictionary *值–某些东西不能既是字典又是数组。但是,您继续在评论中说:

  dictionary

类型是[String,NSNumber]

指出字典中的值既不是NSArray也不是NSDictionary引用,而是NSNumber引用,但是您说:

  

dictionary[SOME_CONSTANT] = NSDictionary的类型

因此NSArrayNSNumber ...

因此,您有很多类型不匹配的情况,除非您显示实际的代码,所有内容的实际类型并确切说明您遇到的问题,否则没有人能真正为您提供帮助。不要尝试编辑此问题,它已经投了反对票,请再提出一个详细问题的投票,可能会有人帮助您。 HTH