【发布时间】:2016-10-12 23:46:40
【问题描述】:
我正在使用 Swift 中的 filter() 方法,但遇到了一个我似乎无法在操场上重现的问题。
编辑:在这里上传了一个示例项目: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)
【问题讨论】:
-
尝试给卡片一个明确的类型:
return hand.filter({ (card: Card) -> Bool in return card.type == .Red }) -
您的代码对我来说编译得很好...也许尝试清理您的构建文件夹?
-
您没有在同一范围内的其他地方定义
card或Card吗?代码对我来说也编译得很好。 -
您能否在已编译的项目(而不是 Playground)中重现该问题?
-
嗯,这很奇怪...如果您将
Card声明与Player声明放在同一个文件中,它将正常工作。一定要提交一份关于那个的错误报告。