1. ホーム
  2. ios

[解決済み] Swift - Int を enum:Int にキャストする

2022-05-10 08:13:45

質問

私はSwiftの初心者で(今週始めました)、私のアプリをObjective-Cから移行しています。私は基本的に正常に動作するObjective-Cの次のコードを持っています。

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];
}

これをSwiftに翻訳する際、以下のようにしました。

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)
}

そうすることで、エラーが発生します。

'Int' は 'MyTimeFilter' に変換できません。

私のやり方(tagプロパティの使用)がベストかどうかはわかりませんが、とにかく、私のアプリのさまざまな場所でこの種のキャスティングを行う必要があります。このエラーをなくす方法をご存知の方はいらっしゃいますか?

ありがとうございます。

どのように解決するのですか?

を使用します。 rawValue のために自動的に生成されるイニシャライザである。 enum s.

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

をご覧ください。 Swift プログラミング言語 § 列挙


注 この答えは変わりました。Swift の以前のバージョンでは、クラスメソッド fromRaw() を使用して、生の値を列挙された値に変換します。