Функция перегрузки в расширении выдает ошибки - PullRequest
1 голос
/ 15 июня 2019

Я пытался добавить перегрузку добавления для Swift Array

import Foundation

extension Array {
    func append<From>(from: [From], transformer: (From) -> [Element]) {
        from.forEach {
            self.append(contentsOf: transformer($0))
        }
    }
}

И это показывает мне ошибку компиляции: Error:(47, 24) extraneous argument label 'contentsOf:' in call похоже, я не могу использовать другие перегрузки append в моей собственной перегрузке. Это действительно странно. Вы можете помочь?

1 Ответ

2 голосов
/ 15 июня 2019

Эта ошибка вводит в заблуждение. Ваша 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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...