Array.append(_:) expects an argument of type Element, which is only a single element. Obviously, providing a [String] as an argument to this parameter would only work if Element is [String], i.e. if the array had type [[String]]. Since this isn't the case, Array.append(_:) is not the right choice.
Instead, you should use Array.append(contentsOf:), which expects an argument of type S, where S is any Sequence conforming type whose Element is the same as the Array's element. This is suitable for when you want to append all of the elements of a subarray (dwarfName).
let arrayOfDwarfArrays = [["Sleepy", "Grumpy", "Doc"], ["Thorin", "Nori"]]
var dwarfArray: [String] = []
for dwarfName in arrayOfDwarfArrays {
dwarfArray.append(contentsOf: dwarfName)
}
In this particular case though, this code is even better expressed using a simple Array.flatMap(_:) operation:
let arrayOfDwarfArrays = [["Sleepy", "Grumpy", "Doc"], ["Thorin", "Nori"]]
let dwarfArray = arrayOfDwarfArrays.flatMap { $0 }