Tôi có một giao thức mà tôi định nghĩa như sau:Swift: Kiểm tra xem loại generic phù hợp với giao thức
protocol MyProtocol {
...
}
Tôi cũng có một cấu trúc chung:
struct MyStruct <T> {
...
}
Cuối cùng tôi có một hàm tổng quát:
func myFunc <T> (s: MyStruct<T>) -> T? {
...
}
Tôi muốn kiểm tra bên trong hàm nếu kiểu T phù hợp với MyProtocol. Về cơ bản tôi muốn để có thể làm (~ giả):
let conforms = T.self is MyProtocol
Nhưng điều này ném một lỗi biên dịch:
error: cannot downcast from 'T.Type' to [email protected] protocol type 'MyProtocol'
let conforms = T.self is MyProtocol
~~~~~~^~~~~~~~~~~
Tôi cũng đã cố gắng biến thể, như T.self is MyProtocol.self
, T is MyProtocol
, và sử dụng ==
thay vì is
. Cho đến nay tôi đã không nhận được bất cứ nơi nào. Ý tưởng nào?
Ngay cả với điều này, tôi vẫn nhận được lỗi tương tự. Giao thức '@objc MyProtocol {} struct MyStruct {} func myFunc (s: MyStruct ) -> T? { cho phép conforms = T.self là MyProtocol } ' –
Alex
@Alex, bạn cần phải tạo trường hợp kiểu T trước khi bạn có thể kiểm tra sự phù hợp của giao thức (như tôi biết) Nếu bạn cần loại T phải là loại duy nhất phù hợp với MyProtocol, bạn có thể chỉ định nó: 'func myFunc (...) -> T?' –
rabbitinspace