Swift의 Enum을 if 문으로 비교할 수 없음 (Associated Value)

5243 단어 Swiftenumswift3

사건



어떤 enum의 값을 if 문으로 비교하려고하면 화가났습니다.
import Foundation

enum LoginProvider {
    case facebook
    case email(String, String)
    case google
    case twitter
}

let provider = LoginProvider.email("[email protected]", "pass")

if provider == .facebook {
    print("facebook")
}


'=='을 사용할 수 없으면.
사용할 수 없다고 말해도, 라고 잠시 고민해 버렸다.

원인


email(String, String) 가 Enum의 Associated Value라고 하는 것으로, 이것이 포함되어 있으면 == 오퍼레이터는 사용할 수 없어 컴파일 에러가 되어 버립니다.

해결책



이것에 대응하려면 솔직하게 switch 문장으로 쓰거나 if문으로 쓰고 싶으면 if-case 패턴 매치를 사용할 수 있습니다.
import Foundation

enum LoginProvider {
    case facebook
    case email(String, String)
    case google
    case twitter
}

let provider = LoginProvider.email("[email protected]", "pass")

// 単純な比較はコンパイルエラーになる❌
// Binary operator '==' cannot be applied to operands of type 'LoginProvider' and '_'
if provider == .facebook {
    print("facebook")
}

// switch文で書くのが無難⭕️
switch provider {
case .facebook: break
case .email: break
case .google: break
case .twitter: break
}

// とはいえ単一の比較とかならif文で書きたいことも
// if文で書くならパターンマッチを使う⭕️
if case .facebook = provider {
    print("facebook")
} else if case .email = provider {
    print("email")
}

소감



에러 메시지가 == 사용할 수 없을 뿐이므로, 모르면 상당히 고민할 것 같다고 생각했습니다. 사양적으로 사용할 수 없는 것은 알았습니다만, 무엇으로 사용할 수 없는지까지는 아직 알고 있지 않습니다. 사용할 수 있어도 좋을 것 같은 생각이 듭니다만.

참고



Enum의 Associated Value에 대해서는 이쪽이 참고가 되었습니다.
htps : // 레아 lm. 이오/jp/네 ws/다ゔぃd-에아 st-하고 mpぃfy んg-ぉ 긴-스ぃft-에누 ms/
샘플도 이쪽으로부터 빌리고 있습니다.

좋은 웹페이지 즐겨찾기