切换到Swift - 交换机中的Case标签应该至少有一个可执行语句

Fra*_*scu 9 iphone enums switch-statement ios swift

我有一个在Swift enum中扩展的类型String.

当我尝试使用时,switch我收到了一个错误:

交换机中的案例标签应至少具有一个可执行语句

这是我的代码:

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 ""
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我很确定这是一个简单的错误,有人看到了吗?

Ant*_*nio 19

swift switch语句中没有隐含的突破,所以你必须明确地设置:

    case .CameraICloudActivated: fallthrough
    case .CameraICloudShare: fallthrough
    case .CameraMyPhotoStream: fallthrough
    case .CameraPhotosCount: fallthrough
    case .NetworkConnection: fallthrough
    case .PhoneLanguage: fallthrough
    case .UserIdentifier:
        return value
Run Code Online (Sandbox Code Playgroud)

没有这个,每个案例都有隐含的突破.

请注意,swift要求每个switch case包含至少一个语句 - 如果没有语句,则break必须使用explicit (在这种情况下意味着"什么都不做")


Cen*_*nny 7

您可以为案例设置多个值,您只需要用逗号分隔它们即可.

我还建议返回一个nil值而不是一个空字符串,并使函数返回值为String?,但这取决于函数的使用方式.

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