Swift编译器错误:"无法使用类型'((_) - > _)"的参数列表调用'map'

tku*_*you 21 higher-order-functions ios swift

我有一个我想要映射的范围,但我收到了错误

“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
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果我取出闭包内的所有内容并返回"",那么编译器就不会抱怨.但是,即使我添加一行而不是返回空字符串,编译器也会抱怨,例如:

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

我在这里错过了什么吗?

Sul*_*han 40

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

let patterns = (0...5).map { verseNum -> String in
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我相信Swift应该能够推断出类型,因此它可能是一个bug.

  • 我要补充一点,这确实是 Swift 类型推断中的一个错误,而不是它_必须_的方式。`verseNum` 应该可以从范围和 return 语句的返回值中推断出来。 (2认同)