マップしようとしている範囲がありますが、エラーが発生します
“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
}
}
クロージャー内のすべてのものを取り出し、単に ""を返す場合、コンパイラーは文句を言いません。ただし、返された空の文字列以外の1行を追加しても、コンパイラーは次のように文句を言います。
let patterns = (0...5).map { verseNum in
let verseNumberStartPattern = "\"verse-num\">\(verseNum)</span>(?:\\s?<span>)?(.*?)<"
return ""
}
ここで何か不足していますか?
Swiftが毎回コンテキストから型を推測することはできません。型を推測できない場合は、型を明示的に入力する必要があります。この場合は戻り値の型です。
let patterns = (0...5).map { verseNum -> String in
この場合、私はSwiftが型を推測できるはずなので、バグかもしれません。