如何制作枚举案例(swift)

时间:2014-10-04 07:53:18

标签: objective-c swift enums switch-statement ios8

我从ObjC那里得到了这个代码。我想把它转换成Swift,但是,我很难这样做......

ObjC代码:

navgivet.h

typedef NS_ENUM(NSInteger, BB3Photo) {
kirkenType = 10 ,
festenType = 20 ,
praestType = 30
};
@property (nonatomic, assign) BB3Photo selectedPhotoType;

navgivet.m

- (IBAction)changeImage:(id)sender {
if ([sender isKindOfClass:[UIButton class]]) {
    UIButton *button = sender;
    _selectedPhotoType = button.tag;
}
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Vælg Billed"
                                                   delegate:self
                                          cancelButtonTitle:nil
                                     destructiveButtonTitle:nil
                                          otherButtonTitles:@"Vælg fra Biblioteket", @"Vælg Kamera", nil];
sheet.actionSheetStyle = UIActionSheetStyleDefault;
[sheet showInView:[self.view window]];

}

switch (_selectedPhotoType) {
    case kirkenType: {
}break;
        case festenType: {
}break;
    case praestType: {
}break;
    default: 
       break;

这是我尝试的快速代码

 enum BBPhoto1: Int {
    case kommunen = 10
    case sagsbehandler = 20
    case festen = 30
}
@IBAction func changeImage(sender: AnyObject){
    if sender .isKindOfClass(UIButton){
        let button: UIButton = sender as UIButton
        selectedPhoto = BBPhoto1.fromRaw(button.tag)
    }

    let actionSheet = UIActionSheet(title: "Billeder", delegate: self, cancelButtonTitle: nil, destructiveButtonTitle: nil, otherButtonTitles: "Vælg fra Biblioteket", "Vælg Kamera")
    actionSheet.showInView(self.view)

}
var selectedPhoto: BBPhoto1?

switch (selectedPhoto) {
        case kommunen {

        }

    case sagsbehandler{

        }
    }

但是我得到错误:“使用未解析的标识符kommunen”和相同的messege但是使用Sagsbehandler。

如何让它发挥作用?

1 个答案:

答案 0 :(得分:12)

您的代码中存在3个问题。

首先,selectedPhoto被声明为可选,因此您必须在使用switch语句之前解包它 - 例如使用可选绑定。

第二个问题是您使用的语法不正确。在每个case中,您必须指定全名(包括类型),后跟冒号:

case BBPhoto1.kommunen:
    // statements

但由于类型可以通过交换机中使用的变量类型推断,您可以忽略枚举类型,但不能忽略点:

case .kommunen:
    // statements

最后,在swift中,switch语句要求明确处理所有案例(在您的情况下为3)或使用default案例处理switch中未明确处理的所有案例

您的代码的工作版本如下所示:

enum BBPhoto1: Int {
    case kommunen = 10
    case sagsbehandler = 20
    case festen = 30
}

var selectedPhoto: BBPhoto1?

if let selectedPhoto = selectedPhoto {
    switch (selectedPhoto) {
    case .kommunen:
        println(selectedPhoto.toRaw())

    case .sagsbehandler:
        println(selectedPhoto.toRaw())

    default:
        println("none")
    }
}

请注意,与其他语言不同,每种情况下的代码都不会自动落入下一种情况,因此不需要break语句 - 唯一的用例就是当一个案例没有声明(没有声明的情况是swift中的错误),在这种情况下,break只是充当占位符,其含义是“什么也不做”。

建议阅读:Conditional Statements