2014-11-25 11 views
7

Ho un tipo enum che estende String in Swift.Passare a Swift - L'etichetta di caso in uno switch deve avere almeno una istruzione eseguibile

Quando provo ad usare un switch ho ottenuto un errore:

Case label in a switch should have at least one executable statement

Ecco il mio codice:

enum UserInfosKey:String { 
    case CameraMyPhotoStream = "CMPS" 
    case CameraICloudActivated = "CICA" 
    case CameraICloudShare = "CICS" 
    case ProjectTodayExtension = "PTE" 
    case ProjectShareExtension = "PSE" 
    case NetworkConnection = "NC" 
    case PhoneLanguage = "PL" 
    case CameraPhotosCount = "CPC" 
    case UserIdentifier = "UI" 
    case VersionHistory = "VH" 
    case Path = "Path" 

} 

class UserInfosController: NSObject { 
    func update(key:UserInfosKey, value:String, context:UserDefaultsMainKeys) -> String { 
     switch key { 
     case .CameraICloudActivated: 
     case .CameraICloudShare: 
     case .CameraMyPhotoStream: 
     case .CameraPhotosCount: 
     case .NetworkConnection: 
     case .PhoneLanguage: 
     case .UserIdentifier: 
      return value 

     default: 
      return "" 
     } 
    } 
} 

enter image description here

Sono abbastanza sicuro che sia un semplice errore, qualcuno lo vede?

risposta

12

Non v'è alcun falltrough implicita nella rapida switch dichiarazione, quindi bisogna impostare in modo esplicito che:

case .CameraICloudActivated: fallthrough 
    case .CameraICloudShare: fallthrough 
    case .CameraMyPhotoStream: fallthrough 
    case .CameraPhotosCount: fallthrough 
    case .NetworkConnection: fallthrough 
    case .PhoneLanguage: fallthrough 
    case .UserIdentifier: 
     return value 

Senza questo, ogni caso ha pausa implicita.

noti che rapida richiede che ogni caso interruttore contiene almeno una dichiarazione - in caso di mancata dichiarazione, un esplicito break deve essere utilizzato (che in questo caso significa "non fare nulla")

+0

OK, e ho scoperto che è possibile collegarlo con una virgola. 'caso .valore1, .valore2:'. L'ho dimenticato, ma questo era nei primi capitoli degli ebook. (Accetterò questa risposta al più presto) – Francescu

+0

Sì, questo è un altro modo, ma per una lunga lista preferisco un elenco uno per uno esplicito, anche se a scapito di più codice - che è più leggibile ai miei occhi, ma è solo un questione di preferenza. Bello avere più di un modo per fare la stessa cosa però. – Antonio

5

Si possono avere molti valori per un caso, tutto ciò che devi fare è separarli con una virgola.

Si consiglia inoltre di restituire un valore nullo rispetto a una stringa vuota e di rendere la funzione valore restituito una stringa ?, ma ciò dipende da come verrà utilizzata la funzione.

func update(key:UserInfosKey, value:String, context:UserDefaultsMainKeys) -> String? { 
    switch key { 
    case .CameraICloudActivated, 
     .CameraICloudShare, 
     .CameraMyPhotoStream, 
     .CameraPhotosCount, 
     .NetworkConnection, 
     .PhoneLanguage, 
     .UserIdentifier: 
     return value 
    default: 
     return nil 
    } 
} 
Problemi correlati