Swift结束:无法将类型'(_) - > Bool'的值转换为预期的参数类型
问题描述:
我正在使用Swift中的filter()
方法,但遇到了我在操场中似乎无法重现的问题。Swift结束:无法将类型'(_) - > Bool'的值转换为预期的参数类型
编辑:上传实例项目位置:https://www.dropbox.com/s/5ce5uyxnpb0mndf/WeirdSwifty.zip?dl=0
我有一个Card
结构包含一个CardType
枚举:
struct Card {
var name = ""
var type : CardType
enum CardType {
case Red
case Black
}
}
而一个Player
类维护这些Card
项目的数组:
class Player {
var hand : [Card]
init() {
hand = ...
}
func redCards() -> [Card] {
return hand.filter({ (card) -> Bool in
return card.type == .Red
})
}
}
然而,无论我怎么试图格式化这个闭包,Xcode都会抛出一个错误。我甚至让Xcode的自动完成关闭签名/身,想着我有一个语法错误,但它一直重新创建相同的(正确吗?)的方式:
我也试着编辑Xcode中什么自动生成并提供了一个简单的版本,但没有成功:
同理:
正如我所提到的,我无法在一个简单的操场示例中重现此操作,但我无法缩小在我的主项目中导致问题的实际。
这是我的项目中唯一的错误,如果我注释掉包含filter()
调用的方法,它会正确构建。
这个错误是其他一些实际问题的常见红鲱鱼吗?
注:使用的Xcode 7.3.1(7D1014)
答
的薄片状的东西与斯威夫特的类型推断happing。给card
一个明确的类型,它会起作用。
return hand.filter({ (card: Card) -> Bool in return card.type == .Red })
你不需要返回类型或返回:
return hand.filter({ (card: Card) in card.type == .Red })
注:该作品也:
return hand.filter({ ($0 as Card).type == .Red })
完全指定.Red
枚举值可以解决问题,以及:
return hand.filter({ $0.type == Card.CardType.Red })
在评论中提到,如果将Card
的定义移动到与过滤器相同的文件中,它就会起作用。实际上,如果将CardType
枚举的定义从Card
中划分出来,并且只将CardType
移动到带有过滤器的文件中,它就会起作用。
尝试给卡显式类型:'return hand.filter({(card:Card) - > Bool in return card.type == .Red })' – vacawama
你的代码对我来说编译得很好......也许尝试清理你的生成文件夹? – Hamish
难道你没有在同一范围内的其他地方定义'card'或'Card'吗?代码也适合我编译。 – Sulthan