1

私のコード (以下のフラグメント) により、シミュレーターがハングします。私は何を間違っていますか?

問題を再現するには、切り取ってシミュレータに貼り付けます。

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)")
}
4

1 に答える 1

2

これは既知のバグです。SR-1635を参照してください。IUO は個別の型ではなくなったため、そもそも IUOの配列を持つことは実際には不可能であるべきです。

これは、次のコードがコンパイルに失敗するという事実によって確認されます。

// compiler error: Implicitly unwrapped optionals are only allowed at top level.
// and as function results
var array: [Ink!] = []

Ink( Swiftの命名規則に準拠するために、クラス名をに変更したことに注意してください)

状況によっては、代わりにlazyプロパティの使用を検討することをお勧めします。

lazy var array : [Ink] = {

    var array = [Ink]()

    // populate array

    return array
}()

または、配列自体を暗黙的にラップ解除されたオプションにします (そして、配列の割り当てと初期化の両方を延期します):

var array : [Ink]!

ただし、IUO は固有の危険性があるため、常に最後の手段とすべきであることに注意してください。

于 2016-08-09T17:37:54.717 に答える