ios - type - swift enum string




Swift-Int in enum: Int (2)

Ich bin Swift sehr neu (hat diese Woche angefangen) und migriere meine App von Objective-C. Ich habe im Grunde den folgenden Code in Objective-C, der gut funktioniert:

typedef enum : int {
    MyTimeFilter1Hour = 1,
    MyTimeFilter1Day = 2,
    MyTimeFilter7Day = 3,
    MyTimeFilter1Month = 4,
} MyTimeFilter;

...

- (void)selectFilter:(id)sender
{
    self.timeFilterSelected = (MyTimeFilter)((UIButton *)sender).tag;
    [self closeAnimated:YES];
}

Bei der Übersetzung zu Swift habe ich Folgendes getan:

enum MyTimeFilter : Int {
    case OneHour = 1
    case OneDay = 2
    case SevenDays = 3
    case OneMonth = 4
}

...

@IBAction func selectFilter(sender: AnyObject) {
    self.timeFilterSelected = (sender as UIButton).tag as MyTimeFilter
    self.close(true)
}

Dadurch bekomme ich den Fehler:

'Int' ist nicht in 'MyTimeFilter' konvertierbar

Ich weiß nicht, ob mein Ansatz (mit der Tag-Eigenschaft) der beste ist, aber ich muss diese Art von Casting an verschiedenen Stellen in meiner App durchführen. Hat jemand eine Idee, wie man diesen Fehler loswerden kann?

Vielen Dank!


Verwenden Sie den Initialisierer rawValue : Es wird automatisch ein Initialisierer für enum s generiert.

self.timeFilterSelected = MyTimeFilter(rawValue: (sender as UIButton).tag)!

siehe: Die Swift-Programmiersprache § Aufzählungen

HINWEIS: Diese Antwort hat sich geändert. Eine frühere Version von Swift verwendet die Klassenmethode fromRaw() , um Rohwerte in aufgezählte Werte zu konvertieren.


Verwendung von Enum zum Vergleich wie folgt:

enum LoanType: Int {
    case FHA , VA, CONS, CASH
}
var loanType = LoanType.FHA

Vergleich:

if loanType == .FHA
     {
      print("FHA")
     }

Um den Wert zu ändern:

loanType = .CASH




swift