我从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。
如何让它发挥作用?
答案 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
只是充当占位符,其含义是“什么也不做”。