Конкатенация к необязательному массиву с оператором "+="
Я пытаюсь добавить несколько строк в массив. Этот код работает как ожидалось:
var myArray: [String] = []
myArray += ["dog", "cat"]
Это дает мне ошибку:
var myArray: [String]! = []
myArray += ["dog", "cat"] //error: '[String]!' is not identical to 'UInt8'
Это ошибка или конкатенация к дополнительному массиву не должна работать?
1 ответ
myArray
является необязательным, и как таковой, вы должны явно развернуть его, чтобы заставить приложение работать:
myArray! += ["dog", "cat"]
Это звучит нелогично, потому что цель неявно развернутого необязательного файла состоит в том, чтобы избежать ручного развертывания. Однако в документации сказано, что:
Неявно развернутый необязательный параметр является обычным необязательным за кулисами, но его также можно использовать как неопциональное значение, без необходимости развертывать необязательное значение при каждом обращении к нему.
Мое объяснение состоит в том, что, будучи дополнительным перечислением под капотом, +=
Оператор применяется к перечислению, а не к фактическому типу, обернутому самим необязательным.