因此,我试图将一些obj-c代码转换为swift,但我遇到了这个问题,我不知道如何将其转换为swift。
如果我是正确的话,下面的几行内容如下:将dictionary[SOME_CONSTANT]
的结果放入一个名为nameOfArray
的新数组中,并根据{的值来制作一个名为nameOfDictionary
的新字典。 {1}}。
dictionary[SOME_CONSTANT]
答案 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
的类型
因此NSArray
或NSNumber
...
因此,您有很多类型不匹配的情况,除非您显示实际的代码,所有内容的实际类型并确切说明您遇到的问题,否则没有人能真正为您提供帮助。不要尝试编辑此问题,它已经投了反对票,请再提出一个详细问题的投票,可能会有人帮助您。 HTH