Ошибка компилятора 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 ""
}
Я что-то пропустил?
Ответы
Ответ 1
Swift не может выводить типы из контекста каждый раз. Если он не может вывести типы, вы должны ввести их явно, в этом случае возвращаемый тип:
let patterns = (0...5).map { verseNum -> String in
В этом случае я считаю, что Swift должен иметь возможность выводить тип, чтобы он мог быть ошибкой.