Với mã này:Làm cách nào để gọi thuộc tính tĩnh trên giao thức Swift từ một hàm chung?
public protocol Selectable {
typealias T
var selected: Bool { get }
static var defaultValue: T { get }
}
public func selected<T: Selectable>(items: [T]) -> T {
if let selected = items.filter({$0.selected}).first {
return selected
}
return T.defaultValue
}
tôi nhận được một lỗi trên dòng trở lại: "Không thể chuyển đổi biểu hiện trở lại của loại 'T.T' để dự đoán kiểu trả về 'T'".
Thay đổi thành return T.defaultValue as! T
dường như hoạt động nhưng điều đó không có ý nghĩa với tôi. Tôi có thiếu cái gì hay tôi nên ghi một radar?
Aha, vì việc khai báo hàm chung không biết T là gì (ít nhất là lúc nào? Hay ít nhất là lúc không biên dịch) nhưng giao thức có? Hay đại loại thế? –
Vâng, trong mã của bạn, hàm 'selected' không biết loại' typealias T' thực sự là gì. 'T' trong hàm' đã chọn' và 'T' trong' Có thể chọn' không liên quan. – rintaro