2

I'm trying to append multiple strings to an array. This code works as expected:

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

This gives me an error:

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

Is this a bug, or is concatenating to an optional Array not supposed to work?

Moon Cat
  • 1,853
  • 2
  • 15
  • 25

1 Answers1

0

myArray is an optional, and as such you have to explicitly unwrap it in order to make the append work:

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

That sounds counterintuitive, because the purpose of the implicitly unwrapped optional is to avoid manual unwrapping. However the documentation says that:

An implicitly unwrapped optional is a normal optional behind the scenes, but can also be used like a nonoptional value, without the need to unwrap the optional value each time it is accessed

My explanation is that, being the optional an enum under the hood, the += operator is applied to the enum and not to the actual type wrapped by the optional itself.

Antonio
  • 67,757
  • 10
  • 137
  • 161