我的代码(下面的片段)导致模拟器挂起。 我做错了什么?
要重现问题,请剪切并粘贴到模拟器中。
class INK
{
var test = 1
}
var array = [INK!](repeating: nil, count: 1)
for idx in 0..<array.count
{
array[idx] = INK()
}
var idx2 = 0
for ink_item in array
{
idx2 += 1
print("idx2=\(idx2)")
}
答案 0 :(得分:2)
这是一个已知错误,请参阅SR-1635。由于IUO是no longer a distinct type,因此首先不可能有一个数组。
以下代码无法编译,这证实了这一点:
// compiler error: Implicitly unwrapped optionals are only allowed at top level.
// and as function results
var array: [Ink!] = []
(注意我将您的类名重命名为Ink
以符合Swift命名约定)
根据您的具体情况,您可能需要考虑使用lazy
property代替:
lazy var array : [Ink] = {
var array = [Ink]()
// populate array
return array
}()
或者使数组本身成为一个隐式解包的可选项(并推迟数组的分配和初始化):
var array : [Ink]!
虽然注意到IOOO应该始终是最后的手段,因为inherent unsafety。