我正在尝试映射一个范围,但出现错误“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 ""
}
我在这里想念什么吗?
最佳答案
Swift不能每次都从上下文推断类型。如果无法推断类型,则必须显式键入它们,在这种情况下为返回类型:
let patterns = (0...5).map { verseNum -> String in
在这种情况下,我相信Swift应该能够推断出类型,因此可能是一个错误。