Swift의 Enum을 if 문으로 비교할 수 없음 (Associated Value)
사건
어떤 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/
샘플도 이쪽으로부터 빌리고 있습니다.
Reference
이 문제에 관하여(Swift의 Enum을 if 문으로 비교할 수 없음 (Associated Value)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/y_koh/items/204f04ab11677bd73444텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)