Swift compiler error: “Cannot invoke 'map' with an argument list of type '((_) -> _)'”

Swift compiler error: “Cannot invoke 'map' with an argument list of type '((_) -> _)'”

我有一个要映射的范围,但出现错误

“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
        }
    }

如果我取出闭包中的所有内容,只取出 return "",那么编译器不会报错。但是,即使我添加了 return 空字符串以外的一行,编译器也会报错,例如 for:

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

我是不是漏掉了什么?

Swift 不能每次都从上下文推断类型。如果它无法推断类型,则必须显式键入它们,在本例中为 return type:

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

在这种情况下,我相信 Swift 应该能够推断出类型,所以它可能是一个错误。