2014-11-25 1 views
7

Ich habe einen enum Typ, der String in Swift erweitert.Switch in Swift - Case Label in einem Schalter sollte mindestens eine ausführbare Anweisung haben

Wenn ich versuche, eine verwenden switch ich einen Fehler bekam:

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

Hier ist mein Code:

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

Ich bin ziemlich sicher, es ist ein einfacher Fehler, jemand sieht es?

Antwort

12

Es gibt keine implizite fallthrough in der schnellen switch Aussage, so dass Sie explizit müssen festgelegt, dass:

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

Ohne dass jeder Fall implizite Pause hat.

Beachten Sie, dass rasche erfordert, dass jedes Schaltergehäuse mindestens eine Anweisung enthält - bei keiner Erklärung, ein explizites break verwendet werden (was in diesem Fall bedeutet „nichts tun“)

+0

OK, und ich fand, dass Sie das mit einem Komma abkürzen können. 'case .Wert1, .Wert2:'. Ich habe es vergessen, aber das war in den ersten ebook-Kapiteln. (Ich werde diese Antwort so schnell wie möglich akzeptieren) – Francescu

+0

Ja, das ist ein anderer Weg, aber für eine lange Liste bevorzuge ich eine explizite Einzel-Liste, obwohl auf Kosten von mehr Code - das ist lesbarer in meinen Augen, aber es ist nur ein Angelegenheit der Präferenz. Schön, mehr als eine Möglichkeit zu haben, dasselbe zu tun. – Antonio

5

Sie können viele Werte haben Für einen Fall müssen Sie sie nur durch ein Komma trennen.

Ich würde auch empfehlen, einen NULL-Wert als eine leere Zeichenfolge zurückzugeben und die Funktion Rückgabewert eine Zeichenfolge?, Aber das hängt davon ab, wie die Funktion verwendet wird.

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