Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 多种类型的Swift数组_Objective C_Arrays_Xcode_Swift - Fatal编程技术网

Objective c 多种类型的Swift数组

Objective c 多种类型的Swift数组,objective-c,arrays,xcode,swift,Objective C,Arrays,Xcode,Swift,我正在努力将一个iOS Obj-C项目一次转换为一个类。一个Obj-C类涉及创建一个NSArray,其中包含描述NSString的偶数元素和NSNumber的奇数元素。回想起来,这不是一个伟大的设计,但却完全有效,而且它做到了。我已将其转换为Swift: let coins = ["1p", 0.01 , "2p" , 0.02 , "5p" , 0.05 , "10p" , 0.10 , "20p" , 0.20 , "50p" , 0.50 , "99p" , 0.99 , "£1" ,

我正在努力将一个iOS Obj-C项目一次转换为一个类。一个Obj-C类涉及创建一个NSArray,其中包含描述NSString的偶数元素和NSNumber的奇数元素。回想起来,这不是一个伟大的设计,但却完全有效,而且它做到了。我已将其转换为Swift:

let coins = ["1p", 0.01 , "2p" , 0.02 , "5p" , 0.05 , "10p" , 0.10 , "20p" , 0.20 , "50p" , 0.50 , "99p" , 0.99 ,  "£1" , 1.00 ,  "£2" , 2.00 , "£5" , 5.00 , "£9.99" , 9.99 , "£10" , 10.00 , "£20" , 20.00]
我确实意识到Swift在一维数组中强制执行单个类型,因此我们不会谈论多个类型的数组,而是灵活类型的数组-我希望它能推断出任何对象

然而,我从未发现,因为这行代码似乎是一个Xcode杀手。在我的整个项目中,它会导致索引挂起,很快变得无响应,并最终消耗所有系统内存。即使将这一行代码粘贴到添加到空白单视图应用程序的UIView子类的init中,也会导致Xcode挂起,试图以类似的方式进行构建(我很好奇其他人是否有同样的经验)


鉴于我在这里尝试的是可编译的代码,那么它是否具有合法性呢。如果是这样的话,我是否偶然发现了一个快速错误,或者可能没有做一些重要的事情来让它工作。显然,我可以找到一种更好的方法来做我想做的事情,特别是在Swift中,但我认为在Obj-C中,多种类型的数组是如此罕见,因此不值得进一步了解。

看起来您在Xcode/Swift中遇到了一个带有
数组和文本的bug。我得到了同样的结果。我添加的元素越多,情况似乎就越糟(我的内存在~6个元素之后就满了)。作为一种变通方法,创建一个可变数组(使用
var
而不是
let
)并逐个添加元素似乎效果不错。毫无疑问是Janky,但它不会使Xcode崩溃

var coins: Array<AnyObject> = []
coins += "1p"
coins += 0.01
coins += "2p"
coins += 0.02
coins += "5p"
coins += 0.05
coins += "10p"
coins += 0.10
coins += "20p"
coins += 0.20
coins += "50p"
coins += 0.50
coins += "99p"
coins += 0.99
coins += "£1"
coins += 1.00
coins += "£2"
coins += 2.00
coins += "£5"
coins += 5.00
coins += "£9.99"
coins += 9.99
coins += "£10"
coins += 10.00
coins += "£20"
coins += 20.00
var:Array=[]
硬币+=“1便士”
硬币+=0.01
硬币+=“2便士”
硬币+=0.02
硬币+=“5便士”
硬币+=0.05
硬币+=“10便士”
硬币+=0.10
硬币+=“20便士”
硬币+=0.20
硬币+=“50便士”
硬币+=0.50
硬币+=“99便士”
硬币+=0.99
硬币+=“1英镑”
硬币+=1.00
硬币+=“2英镑”
硬币+=2.00
硬币+=“5英镑”
硬币+=5.00
硬币+=“$9.99”
硬币+=9.99
硬币+=“10英镑”
硬币+=10.00
硬币+=“20英镑”
硬币+=20.00

由于例如Int是结构实例而不是类实例,因此类型为Any[]

var x : Any[] = [1,"2",3.0]

如果更改为
let coins:AnyObject[]=[“1p”,会发生什么情况,0.01,…
?按照您编写它的方式,它看起来更像是一个字典,而不是一个数组。您是否尝试过用字符串或数字作为键来编写字典,这取决于您将如何使用它。呵呵,我得到了同样的结果。当我将这一行添加到我的游乐场时,我看到内核任务的内存使用率高达10gb。有一次我强制退出Xcode,它会下降到更正常的1.4gb。我尝试了
let coins:AnyObject[]
let coins:Array
。确定AnyObject是正确的类型吗?不应该是任何?
Array.convertFromArrayLiteral(1,1.2,“x”)
我同意它应该是
Any
,但我不确定它是否应该编译,因为Swift的严格类型性质完全同意它应该是,尽管当我检查单个元素时,我似乎回忆起它们是NSString和NSNumber的派生。也许Swift还不能正确地推断出一个数组?问题可能是swift在NSString和String之间进行奇怪的自动转换,在这种情况下可能会失败。