2015-10-18 18 views
11

Swift'de genel bir tür açmak mümkün mü?Genel bir türün açılması mı?

Burada ne demek istediğimi bir örnek: Yukarıdaki kodu kullanılmaya çalışılırken

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

, ben aşağıdaki hataları alıyorum:

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' 

bir türüne geçmek için bir yol var mı, ya da benzer bir şey elde etmek için?

cevap

16

Sen is desen ihtiyaç (jenerik ve sahne farklı eylemler jenerik türüne bağlı olan bir yöntemi çağırmak): break ifadeler genellikle gerekli olmadığını

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?") 
    } 
} 

Not hiçbir yoktur Swift durumlarda "varsayılan düşüş".

+0

'Switch type' kullanırken garip bir uyarı alıyorum, ancak' T. Kendini değiştir 'mükemmel çalışıyor. Teşekkürler! –

+2

@jackwilsdon: Garip, Xcode 7.0.1'de test ettim ve hiçbir uyarı almadım. –

+0

Bir oyun parkı kullanıyorum, ancak oyun alanını yeniden yükledikten sonra uyarı gitti. Teşekkürler! –

İlgili konular