【发布时间】:2014-06-13 19:22:03
【问题描述】:
我正在努力将 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 中很少看到多种类型的数组,这不值得进一步理解。
【问题讨论】:
-
如果你改成
let coins : AnyObject[] = ["1p", 0.01, ...会怎样? -
按照您的编写方式,它看起来更像是字典而不是数组。你有没有试过把它写成字典,用字符串或数字作为键,这取决于你将如何使用它。
-
嘿,我也得到了同样的结果。当我将此行添加到我的 Playground 时,我看到 kernel_task 的内存使用量飙升至 10gb。一旦我强制退出 Xcode,它就会降到更正常的 1.4gb。我试过
let coins: AnyObject[]和let coins: Array<AnyObject>。 -
确定 AnyObject 是正确的类型吗?那不应该是任何吗?
Array<Any>.convertFromArrayLiteral(1,1.2,"x") -
我同意它应该是
Any,但由于 Swift 的严格类型性质,我不确定它是否应该编译
标签: objective-c arrays xcode swift