programing

Swift - Int를 열거형으로 캐스트합니다.내부

subpage 2023. 4. 24. 23:13
반응형

Swift - Int를 열거형으로 캐스트합니다.내부

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'로 변환할 수 없습니다.

(태그 속성을 사용하는) 방법이 최선인지는 모르겠지만, 어쨌든 앱의 다른 장소에서 이러한 캐스팅을 해야 합니다.이 오류를 제거하는 방법을 알고 있는 사람이 있습니까?

감사합니다!

를 사용합니다.rawValueinitializer: 자동으로 생성되는 initializer입니다.enums.

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

참조: Swift Programming Language » 열거


메모: 이 답변은 변경되었습니다.이전 버전의 Swift는 클래스 메서드를 사용합니다.fromRaw()raw 값을 열거된 값으로 변환합니다.

스위프트 5

@IBAction func selectFilter(sender: AnyObject) {
    timeFilterSelected = MyTimeFilter(rawValue: sender.tag)
 }

또한 열거형을 다시 Integer로 변환하는 방법을 알고 싶다면 다음을 수행할 수 있습니다.

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

let currentValue = .One
let intValue = currentValue.rawValue

Jeffery Thomas의 답변을 자세히 설명하고 있습니다. 안전하게 사용하기 전에 깁스를 풀기 위해, 이것은 충돌을 피할 것입니다.

   @IBAction func selectFilter(sender: AnyObject) {
     guard let filter = MyTimeFilter(rawValue: (sender as UIButton).tag) else { 
        return
    }
        timeFilterSelected = filter
     }

언급URL : https://stackoverflow.com/questions/25276775/swift-cast-int-into-enumint

반응형