스위프트에서 filter()
메서드로 작업하고 있지만 놀이터에서 재생할 수없는 문제가 발생했습니다.스위프트 클로저 : '(_) -> Bool'유형의 값을 예상 인수 유형으로 변환 할 수 없습니다.
편집 : 업로드 여기 예제 프로젝트 : https://www.dropbox.com/s/5ce5uyxnpb0mndf/WeirdSwifty.zip?dl=0
나는 CardType
열거가 포함 된 Card
구조체가 :
struct Card {
var name = ""
var type : CardType
enum CardType {
case Red
case Black
}
}
그리고이 Card
항목의 배열을 유지하는 Player
클래스를 :
class Player {
var hand : [Card]
init() {
hand = ...
}
func redCards() -> [Card] {
return hand.filter({ (card) -> Bool in
return card.type == .Red
})
}
}
그러나이 클로저를 어떻게 포맷하든 관계없이 Xcode에서 오류가 발생합니다. 난 엑스 코드 내가 구문 오류가 있었다 생각, 폐쇄 서명/몸을 자동으로 완성 할 수 있지만, 그것을 같은 (맞습니까?) 방법을 다시 유지 :
나는 또한 엑스 코드를 자동으로 생성하는 것을 편집을 시도했습니다 그리고 아무 소용, 간단한 버전을 제공 : 마찬가지로
:
내가 언급 한 것처럼 간단한 놀이터 예제에서 이것을 재현 할 수는 없지만 실제로는 을 내 기본 프로젝트의 문제으로 좁힐 수 없습니다.
이것은 내 프로젝트의 유일한 오류이며, filter()
호출을 포함하는 메서드를 주석 처리하면 제대로 빌드됩니다.
이 오류는 다른 실제 문제의 일반적인 청어입니까?
참고 : 엑스 코드 7.3.1 (7D1014) 스위프트의 타입 추론에 happing되는 flakey
'return hand.filter ({(card : Card) -> Bool in return }}' – vacawama
당신의 코드가 나에게 잘 컴파일된다. 빌드 폴더를 청소 해보십시오. – Hamish
같은 범위에있는 다른 곳에 '카드'또는 '카드'가 정의되어 있지 않습니까? 코드가 나에게도 잘 컴파일됩니다. – Sulthan