Массив неявно развернутых опций повторяется навсегда в 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]!
Хотя обратите внимание, что ННН всегда должны быть последним средством из-за присущей им небезопасности.