Конкатенация к необязательному массиву с оператором "+="

Я пытаюсь добавить несколько строк в массив. Этот код работает как ожидалось:

var myArray: [String] = []
myArray += ["dog", "cat"]

Это дает мне ошибку:

var myArray: [String]! = []
myArray += ["dog", "cat"] //error: '[String]!' is not identical to 'UInt8'

Это ошибка или конкатенация к дополнительному массиву не должна работать?

1 ответ

Решение

myArray является необязательным, и как таковой, вы должны явно развернуть его, чтобы заставить приложение работать:

myArray! += ["dog", "cat"]

Это звучит нелогично, потому что цель неявно развернутого необязательного файла состоит в том, чтобы избежать ручного развертывания. Однако в документации сказано, что:

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

Мое объяснение состоит в том, что, будучи дополнительным перечислением под капотом, += Оператор применяется к перечислению, а не к фактическому типу, обернутому самим необязательным.

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