Отображение функции броска в swift --- double try - PullRequest
1 голос
/ 08 апреля 2020

Очень маленький вопрос. Когда я пытаюсь отобразить функцию броска в Swift, компилятор заставляет меня дважды использовать ключевое слово try. Для игрушечного примера:

public func combineFiles(files: [String]) throws -> String {
    let strings = try files.map { try String(contentsOfFile: $0) }
    return strings.joined(separator: "\n\n")
}

Оба ключевых слова try во второй строке необходимы для компиляции. Но для меня это просто супер-неправильно - есть ли способ выполнить такую ​​операцию без второго оператора try?

1 Ответ

1 голос
/ 08 апреля 2020

Технически, у вас может быть один try, если вы избегаете звонить map:

func combineFiles(files: [String]) throws -> String {
    var results: [String] = []
    for file in files {
        results.append(try String(contentsOfFile: file))
    }
    return results.joined(separator: "\n\n")
}

Но я думаю, что это неправильное направление. Я бы просто использовал два try паттерна, которые перебрасывают такие функции, как map entail.

Я бы потерял strings, хотя:

func combineFiles(files: [String]) throws -> String {
    try files.map { try String(contentsOfFile: $0) }
        .joined(separator: "\n\n")
}
...