我正在使用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)
嘗試給卡顯式類型:'return hand.filter({(card:Card) - > Bool in return card.type == .Red })' – vacawama
你的代碼對我來說編譯得很好......也許嘗試清理你的生成文件夾? – Hamish
難道你沒有在同一範圍內的其他地方定義'card'或'Card'嗎?代碼也適合我編譯。 – Sulthan