Подтвердить что ты не робот

Ошибка компилятора Swift: "Невозможно вызвать" map "с помощью списка аргументов типа" ((_) → _) "

У меня есть диапазон, который я пытаюсь отобразить, но я получаю сообщение об ошибке

"Cannot invoke 'map' with an argument list of type '((_) -> _)'"

Здесь код выглядит как

    let patterns = (0...5).map { verseNum in
        let verseNumberStartPattern = "\"verse-num\">\(verseNum)</span>(?:\\s?<span>)?(.*?)<"
        let chapterStartPattern = "\"chapter-num\">\\s\(parsedVerse.chapterStart)\\s</span>"
        if verseNum == 1 {
            return chapterStartPattern + "(.*?)<"
        } else {
            return chapterStartPattern + "(?:.*?)" + verseNumberStartPattern
        }
    }

Если я вытащил все в закрытии и просто вернусь ", то компилятор не жалуется. Однако, даже если я добавлю одну строку, отличную от возвращаемой пустой строки, компилятор жалуется, например:

    let patterns = (0...5).map { verseNum in
        let verseNumberStartPattern = "\"verse-num\">\(verseNum)</span>(?:\\s?<span>)?(.*?)<"
        return ""
    }

Я что-то пропустил?

4b9b3361

Ответ 1

Swift не может выводить типы из контекста каждый раз. Если он не может вывести типы, вы должны ввести их явно, в этом случае возвращаемый тип:

let patterns = (0...5).map { verseNum -> String in

В этом случае я считаю, что Swift должен иметь возможность выводить тип, чтобы он мог быть ошибкой.