Swift3 隐式展开的可选数组在Xcode 8 beta 4中永远迭代

Swift3 隐式展开的可选数组在Xcode 8 beta 4中永远迭代,swift3,xcode8-beta4,Swift3,Xcode8 Beta4,我的代码(下面的片段)导致模拟器挂起。 我做错了什么 要重现问题,请剪切并粘贴到模拟器中 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=\(

我的代码(下面的片段)导致模拟器挂起。 我做错了什么

要重现问题,请剪切并粘贴到模拟器中

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)")
}
类墨水
{
var测试=1
}
变量数组=[INK!](重复:nil,计数:1)
对于0..中的idx,这是一个已知错误,请参阅。既然IUO是,那么首先就不可能有一个IUO数组

以下代码未能编译的事实证实了这一点:

// compiler error: Implicitly unwrapped optionals are only allowed at top level.
// and as function results
var array: [Ink!] = []
(注意,我将您的类名重命名为
Ink
,以符合Swift命名约定)

根据你的情况,你可能想考虑用A代替:

或者使数组本身成为隐式展开的可选(并推迟数组的分配和初始化):


尽管需要注意的是,由于IUO的特性,IUO应该始终是最后的选择。

您正在向迭代的同一数组添加项。您的问题似乎没有花时间亲自调试。感谢您的反馈。我遇到的问题是,我需要一个延迟启动的数组。但我面临的问题是,当数组中有可选项时。。for循环永远不存在。在上面的代码array.count=1中。。。但是for循环会迭代到无穷远。谢谢Hamish链接bug数据库。我曾尝试在苹果的bug追踪器中进行搜索,但没有成功(而且要花很长时间才能返回!)。谢谢你的建议。很高兴这是已知的问题。我开始认为Swift3转换要求我在遇到“nil”项时重新访问所有for循环以“break”。@Antony实际上,我仍然能够在Xcode 8 beta 5中重现这一点。@Hamish。同意。这个问题在Beta5上仍然可以重现。
lazy var array : [Ink] = {

    var array = [Ink]()

    // populate array

    return array
}()
var array : [Ink]!