Массив неявно развернутых опций повторяется навсегда в Xcode 8 beta 4

Мой код (фрагмент ниже) приводит к зависанию симулятора. Что я делаю неправильно?

Чтобы воспроизвести проблему, вырежьте и вставьте в симулятор.

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

1 ответ

Это известная ошибка, см. SR-1635. Поскольку 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]!

Хотя обратите внимание, что ННН всегда должны быть последним средством из-за присущей им небезопасности.

Другие вопросы по тегам