gpt4 book ai didi

objective-c - 如何制作枚举案例的开关案例(快速)

转载 作者:搜寻专家 更新时间:2023-10-30 22:26:33 26 4
gpt4 key购买 nike

我从 ObjC 获得了这段代码。我想将它转换为 Swift,但是,我在这样做时遇到了困难...

目标代码:

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”和相同的消息,但使用 Sagsbehandler。

如何让它发挥作用?

最佳答案

您的代码中有 3 个问题。

首先是 selectedPhoto 被声明为可选的,因此您必须在使用 switch 语句之前将其解包 - 例如使用可选绑定(bind)。

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

case BBPhoto1.kommunen:
// statements

但由于可以通过开关中使用的变量类型推断类型,因此您可以忽略枚举类型,但不能忽略点:

case .kommunen:
// statements

最后,在 swift 中,switch 语句要求所有情况都显式处理(在您的情况下为 3 个)或使用 default 情况覆盖所有未明确处理的情况开关

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

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 语句 - 它的唯一用例是当case 没有语句(没有语句的 case 在 swift 中是错误的),在这种情况下 break 只是一个占位符,它的意思是“什么都不做”。

推荐阅读:Conditional Statements

关于objective-c - 如何制作枚举案例的开关案例(快速),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26190828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com