wie man switch case enum-Fall (swift)
Ich habe diesen code von ObjC. Ich möchte konvertieren, um Swift, aber ich habe Schwierigkeiten dabei...
ObjC-code :
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;
Hier meine swift-code in diesem Versuch
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{
}
}
aber ich bekomme Fehler : "Use of unresolved identifier "kommunen" und die selbe messege aber mit Sagsbehandler.
Wie mache ich das ?
Aber der Punkt ist, zu WISSEN, was ich Programmieren etc. WEIß, was ich will, Sie zu trennen und damit Funktionen für. es macht es easiere Namen verwenden und nicht erfinden, das Gericht agian. Auch ich postet dieses im Jahr 2014 😉
Sorry Kenny vergessen zu prüfen, das post-Datum. Ihr vollkommen Recht, die besten Wünsche für Sie, hoffe, dass Sie immer noch verfolgt die swift-Sprache 🙂
Sorry Kenny vergessen zu prüfen, das post-Datum. Ihr vollkommen Recht, die besten Wünsche für Sie, hoffe, dass Sie immer noch verfolgt die swift-Sprache 🙂
InformationsquelleAutor KennyVB | 2014-10-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es 3 Probleme in Ihrem code.
Die erste ist, dass
selectedPhoto
als deklariert ist optional, Sie müssen also packen Sie es vor der Verwendung in einer switch-Anweisung - zum Beispiel mit Hilfe der optionalen verbindlich.Das zweite problem ist, dass die syntax, die Sie verwenden, ist falsch. In jedem
case
Sie müssen geben Sie den vollständigen Namen (einschließlich die type), gefolgt von einem Doppelpunkt:aber da der Typ kann abgeleitet werden, indem die variable Typ im Schalter, können Sie ignorieren die enum-Typ, aber nicht der Punkt:
Letzten, in die swift eine
switch
Aussagen erfordern, dass alle Fälle behandelt werden, entweder explizit (3 in deinem Fall) oder mit einemdefault
Fall über alle Fälle, die nicht ausdrücklich behandeltswitch
.Eine funktionierende version des Codes würde wie folgt Aussehen:
Beachten Sie, dass, anders als andere Sprachen, der code in jedem Fall nicht automatisch fallthrough zum nächsten Fall, so die
break
- Anweisung ist nicht erforderlich - der einzige Anwendungsfall, für den es ist, wenn ein Fall keine Aussage (für den Fall mit keine Anweisung ist ein Fehler in swift), und in diesem Fall diebreak
fungiert einfach als Platzhalter und Ihre Bedeutung ist 'nichts tun'.Empfohlene Lektüre: Bedingte Anweisungen
Aufruf
fromRaw
gibt einen optionalen Wert, da der raw-Wert übergeben Sie möglicherweise nicht eine gültige ein. In diesem Fall erhalten Sienil
. Das ist, warum Sie hatte zu erklärenselectedPhoto
als optional. Verwenden Sie den Wert in derswitch
Sie haben Auspacken der optionalen Wert. Hier, @Antonio hat die optionalen verbindlich syntaxif let
. Dies bindet die nicht-optionalen Wert der Variablen, wenn es nichtnil
. Wenn Sie übergeben einen schlechten Wert zufromRaw
und IhreselectedValue
null ist, dann wird der block folgendenif let
nicht eingegeben werden.Danke @vacawama für die Erklärung in einer so klaren Art und Weise 🙂
Ich denke auch, dass es mehr vorzuziehen, Typ
if let _ = selectedPhoto {
in diesem Fall zu klären, die intension der überprüfung der der optionalen und packen Sie das optional überselectedPhoto!
im folgenden Umfang. Aber das ist nur mein persönlicher Geschmack.Können wir, dass in der switch-Bedingung, sodass nicht schreiben, wenn statment ?
InformationsquelleAutor Antonio