web-dev-qa-db-ja.com

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

クロージャー内のすべてのものを取り出し、単に ""を返す場合、コンパイラーは文句を言いません。ただし、返された空の文字列以外の1行を追加しても、コンパイラーは次のように文句を言います。

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

ここで何か不足していますか?

21
tkuichooseyou

Swiftが毎回コンテキストから型を推測することはできません。型を推測できない場合は、型を明示的に入力する必要があります。この場合は戻り値の型です。

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

この場合、私はSwiftが型を推測できるはずなので、バグかもしれません。

41
Sulthan