Эта ошибка вводит в заблуждение. Ваша append
функция должна быть помечена как mutating
:
extension Array {
mutating func append<From>(from: [From], transformer: (From) -> [Element]) {
from.forEach {
self.append(contentsOf: transformer($0))
}
}
}
Альтернативная реализация
(Возможно, это не то, что вам нужно, но это может помочь другому пользователю.)
Если вы сделаете свой transformer
равным (From) -> Element
, вы можете упростить это до:
extension Array {
mutating func append<From>(from: [From], transformer: (From) -> Element) {
self.append(contentsOf: from.map(transformer))
}
}
Пример вызова:
var strings = ["a", "b", "c"]
strings.append(from: [1, 2, 3], transformer: String.init)
print(strings) // prints ["a", "b", "c", "1", "2", "3"]