Tôi đang làm việc với phương pháp filter()
trong Swift, nhưng gặp phải vấn đề tôi không thể tái tạo trong sân chơi.Đóng cửa nhanh: Không thể chuyển đổi giá trị của loại '(_) -> Bool' thành loại đối số dự kiến
Edit: Tải Lên một dự án ví dụ ở đây: https://www.dropbox.com/s/5ce5uyxnpb0mndf/WeirdSwifty.zip?dl=0
Tôi có một struct Card
chứa một enum CardType
:
struct Card {
var name = ""
var type : CardType
enum CardType {
case Red
case Black
}
}
Và một lớp Player
mà duy trì một mảng của những Card
mục:
class Player {
var hand : [Card]
init() {
hand = ...
}
func redCards() -> [Card] {
return hand.filter({ (card) -> Bool in
return card.type == .Red
})
}
}
Tuy nhiên, Xcode đang ném một lỗi bất kể tôi định định dạng đóng này như thế nào. Tôi thậm chí cho phép Xcode tự động hoàn thành các chữ ký đóng/body, suy nghĩ tôi đã có một lỗi cú pháp, nhưng nó vẫn không ngừng tái tạo nó như nhau (có đúng không?) Cách:
Tôi cũng đã cố gắng chỉnh sửa những gì Xcode tự động tạo ra và cung cấp một phiên bản đơn giản, không có kết quả:
Tương tự:
Như tôi đề cập đến, tôi không thể tái tạo điều này trong một ví dụ sân chơi đơn giản, nhưng tôi không thể thu hẹp những gì thực sự là gây ra vấn đề trong dự án chính của tôi.
Đây là lỗi duy nhất trong dự án của tôi và nếu tôi nhận xét phương thức có chứa cuộc gọi filter()
, cuộc gọi đó sẽ được tạo đúng cách.
Lỗi này có phải là một cá trích đỏ chung cho một số vấn đề thực tế khác không?
Lưu ý: Sử dụng Xcode 7.3.1 (7D1014)
Hãy thử cung cấp thẻ rõ ràng: 'return hand.filter ({(thẻ: Thẻ) -> Bool trong thẻ trả về.type == .Red })' – vacawama
Mã của bạn biên dịch tốt cho tôi ... có thể thử làm sạch thư mục build của bạn? – Hamish
Bạn không có 'thẻ' hoặc' Thẻ' được định nghĩa ở một nơi khác trong cùng phạm vi? Các mã biên dịch tốt cho tôi quá. – Sulthan