Ken*_*yVB 5 enums objective-c switch-statement swift ios8
我从ObjC那里得到了这个代码.我想将它转换为Swift,但是,我很难这样做......
ObjC代码:
navgivet.h
typedef NS_ENUM(NSInteger, BB3Photo) {
kirkenType = 10 ,
festenType = 20 ,
praestType = 30
};
@property (nonatomic, assign) BB3Photo selectedPhotoType;
Run Code Online (Sandbox Code Playgroud)
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]];
Run Code Online (Sandbox Code Playgroud)
}
switch (_selectedPhotoType) {
case kirkenType: {
}break;
case festenType: {
}break;
case praestType: {
}break;
default:
break;
Run Code Online (Sandbox Code Playgroud)
这是我尝试的快速代码
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{
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到错误:"使用未解析的标识符kommunen"和相同的messege但使用Sagsbehandler.
我如何使其工作?
Ant*_*nio 12
您的代码中有3个问题.
第一个是selectedPhoto声明为可选的,因此您必须在使用switch语句之前解包它 - 例如使用可选绑定.
第二个问题是您使用的语法不正确.在每个中case你必须指定全名(包括类型),然后是冒号:
case BBPhoto1.kommunen:
// statements
Run Code Online (Sandbox Code Playgroud)
但由于类型可以通过交换机中使用的变量类型来推断,因此可以忽略枚举类型,但不能忽略点:
case .kommunen:
// statements
Run Code Online (Sandbox Code Playgroud)
最后,在快速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")
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,与其他语言不同,每种情况下的代码都不会自动落入下一种情况,因此break不需要该语句 - 唯一的用例是当一个案例没有语句时(没有语句的情况是swift中的错误),在这种情况下,breakjust只是充当占位符,其含义是"什么都不做".
建议阅读:有条件的陈述