2015-10-18 18 views
11

Có thể bật loại chung trong Swift không?Chuyển sang loại chung?

Dưới đây là một ví dụ về những gì tôi có nghĩa là:

func doSomething<T>(type: T.Type) { 
    switch type { 
    case String.Type: 
     // Do something 
     break; 
    case Int.Type: 
     // Do something 
     break; 
    default: 
     // Do something 
     break; 
    } 
} 

Khi cố gắng sử dụng các mã trên, tôi nhận được các lỗi sau đây:

Binary operator '~=' cannot be applied to operands of type 'String.Type.Type' and 'T.Type' 
Binary operator '~=' cannot be applied to operands of type 'Int.Type.Type' and 'T.Type' 

Có cách nào để chuyển đổi trên một loại, hoặc để đạt được một cái gì đó tương tự? (Gọi một phương thức với một generic và thực hiện hành động khác nhau tùy thuộc vào từng loại của generic)

Trả lời

16

Bạn cần mô hình is:

func doSomething<T>(type: T.Type) { 
    switch type { 
    case is String.Type: 
     print("It's a String") 
    case is Int.Type: 
     print("It's an Int") 
    default: 
     print("Wot?") 
    } 
} 

Lưu ý rằng break báo cáo thường không cần thiết, không có "mặc định" trong các trường hợp Swift.

+0

Tôi nhận được một cảnh báo lạ khi sử dụng 'loại chuyển đổi', tuy nhiên' chuyển T.self' hoạt động hoàn hảo. Cảm ơn! –

+2

@jackwilsdon: Lạ, tôi đã thử nghiệm nó trong Xcode 7.0.1 và không có cảnh báo. –

+0

Tôi đang sử dụng sân chơi, tuy nhiên sau khi tải lại sân chơi, cảnh báo đã biến mất. Cảm ơn! –

Các vấn đề liên quan