我正在努力将iOS Obj-C项目一次转换为Swift类。一个Obj-C类涉及创建具有描述性NSStrings和奇数元素NSNumbers的偶数元素的NSArray。回想起来,这不是一个伟大的设计,但完全有效,它完成了这项工作。我已将此转换为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在一维数组中强制执行单一类型,因此我们不会将多个类型的数组作为灵活类型的数组进行讨论 - 我预计它会推断AnyObject。
然而,我从来没有发现过,因为看起来这条线是Xcode的杀手。在我的整个项目中,它会导致索引挂起,很快变得无法响应并最终消耗所有系统内存。即使将这一行代码粘贴到UIView子类的init中添加到空白的单个视图应用程序中,也会导致Xcode在尝试以类似方式构建时挂起(如果其他人有相同的体验,我很好奇)。我在这里尝试的是否有合法性,因为它是可编译的代码。如果是这样,我偶然发现了一个Swift错误,或者未能做一些重要的事情来让它工作。我显然可以找到一个更好的方法去做我想要的事情,特别是在Swift中,但我不认为Obj-C中很少见到多种类型的数组,因此不值得进一步理解
答案 0 :(得分:2)
看起来您已经使用Array<AnyObject>
和文字在Xcode / Swift中遇到了一个错误。我得到了相同的结果。似乎越多,我添加的元素就越多(我的RAM在~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
答案 1 :(得分:1)
例如Int是结构实例,而不是类实例,类型为Any []
var x : Any[] = [1,"2",3.0]