오류를 전환하고 오류 코드와 일치시킬 수있는 사용자 정의 패턴 일치를 작성하려고합니다.'Enum case is type의 멤버가 아님'으로 사용자 정의 패턴 매칭이 실패했습니다.
enum ErrorCode: Int {
case notSoDumb
case dumbError
}
let myError = NSError(domain: "My domain", code: ErrorCode.dumbError.rawValue, userInfo: nil)
func ~=(pattern: ErrorCode, value: NSError) -> Bool {
return (ErrorCode(rawValue: value.code) == pattern)
}
switch myError {
case ErrorCode.notSoDumb:
print("Not a dumb error")
case ErrorCode.dumbError:
print("Super dumb error")
default:
print("No matches!")
}
내 switch 문에서 첫 번째 경우는 Enum case 'notSoDumb' is not a member of type 'NSError'
의 오류가 아래의 예를 참조하십시오. 나는 정수와 ErrorCode
열거 교체 (내 사용자에게 Int
들과 NSError
들에 맞게 ~=
연산자를 업데이트하는 경우, 모든 작동이 패턴 매칭에 enum
경우와 a known bug입니다
을,이 오류가 발생합니다 , NSError 인스턴스 인'myError'를 Int와 비교하면 에러가 발생합니다 ... 주 목적은 무엇인지 설명해 주시겠습니까? –
이것은 알려진 버그입니다 (https://bugs.swift.org/browse/SR-1121). 먼저 임시 작업에 할당합니다 (예 : 'let notSoDumbErrorCode = ErrorCode.notSoDumb','case notSoDumbErrorCode : '). – Hamish
@Hamish 여기서 문제를 설명해 주시겠습니까? 언급 한 switch 문에 기반하여 그러한 오류가 발생한다고 가정합니다 ... –