2014-09-15 16 views
6

In Swift, per verificare la conformità del protocollo con is o as? downcasting, è necessario contrassegnare il protocollo con l'attributo @objc. Una volta che si contrassegna un protocollo con quell'attributo, sembra che non si possa avere un protocollo con un enum come una proprietà perché le enumerazioni non possono essere rappresentate in Objective-C.Verificare la conformità del protocollo quando il protocollo contiene un enum in Swift?

enum Language:String { 
    case English = "English" 
    case Spanish = "Spanish" 
    case German = "German" 
} 

@objc protocol Humanizable { 
    var language:Language { get set } 
} 

Si otterrà un errore: error: property cannot be marked @objc because its type cannot be represented in Objective-C

Qui è pieno esempio: http://swiftstub.com/475659213/

Nell'esempio se si modifica il Language-String poi funziona benissimo.

+0

Grazie per il collegamento swiftstub.com, molto utile! Un problema interessante anche. – ColGraff

+0

@Graff No prob. Almeno puoi provarlo e vedere il problema che sto affrontando. – Johnston

+0

Sì, lo vedo. Ho ingannato un po 'ma non ho ancora inventato nulla. Speriamo che ci sia una buona risposta là fuori, il massimo che ho potuto inventare era usare un Int o String al posto dell'enum. – ColGraff

risposta

0

Questa non è una risposta, ma ho fatto individuare un errore di compilazione nella vostra 'stub rapida', Human dovrebbero essere definite come segue:

class Human:Humanizable { 
    var name:String = "Frank" 
    var language:Language = .English 
} 

Stavi cercando di creare un'istanza enum da una stringa letterale .

Sono un po 'sorpreso dal fatto che il controllo di conformità del protocollo richieda @obj - è semplicemente brutto!

+0

Yah è strano: " È possibile verificare la conformità del protocollo solo se il protocollo è contrassegnato con l'attributo @objc "Direttamente dall'iBook. – Johnston

Problemi correlati