Swift:无法使用类型为“(@noescape(Int)抛出-> Bool)”的参数列表调用“过滤器”

Posted

技术标签:

【中文标题】Swift:无法使用类型为“(@noescape(Int)抛出-> Bool)”的参数列表调用“过滤器”【英文标题】:Swift : Cannot invoke 'filter' with an argument list of type '(@noescape (Int) throws -> Bool)' 【发布时间】:2015-11-02 16:40:37 【问题描述】:

我被这个错误困住了:

func compactCoords(coords: [Int]) -> [Int]
    return coords.filter( (value) -> Bool in
        return value != 0
    )

不能使用类型为“(@noescape (Int) throws -> Bool)”的参数列表调用“过滤器”

感谢您的帮助!

【问题讨论】:

为了帮助你,我需要更多的上下文。你如何调用该函数?上次出现此错误时,我尝试将返回的过滤器函数数组应用于集合。因此,您可能会因为调用该函数的方式而收到错误... 托尼史塔克谢谢。这对我有帮助。 :) 【参考方案1】:

您的代码在 Xcode 7.1 中运行良好。您可能不小心尝试在 Xcode 6.x 中运行此代码?

你可以像这样缩短你的函数:

func compactCoords(coords: [Int]) -> [Int] 
    return coords.filter  $0 != 0 

输出:

let coords = [1,2,3,0,4,5,6]
let compactedCoords = compactCoords(coords) // [1, 2, 3, 4, 5, 6]

【讨论】:

以上是关于Swift:无法使用类型为“(@noescape(Int)抛出-> Bool)”的参数列表调用“过滤器”的主要内容,如果未能解决你的问题,请参考以下文章

快速数组无法将“AnyObject”类型的值转换为预期的参数类型@noescape(AnyObject)抛出-> Bool

Swift2.1keyword @noescape介绍

Swift2.1关键字 @noescape介绍

无法转换类型“Meme!”的值到预期的参数类型'@noescape (Meme) throws -> Bool'

Swift 1.2 中的 @noescape 属性

为啥 @noescape 在需要时不会自动应用于 Swift 闭包?