[Swift] Enum의 Associated Value의 정의를 바꾸면 탈절됩니다.

1907 단어 SwiftenumiOS

개시하다


매우 편리한 Enum AssiociatedValue 를 사용하려면 정의를 변경해야 합니다.
다른 사람이 같은 실수를 반복하지 않도록 내가 실제로 발생한 잘못을 소개하겠다.

수정 전


예를 들어, 다음과 같은 Enum이 있다고 가정합니다.
enum Hoge {
    case foo(value: Int)
    case bar(value: Int)
}
만약에 이 Enum을 이렇게 사용한다면...
let hoge = Hoge.bar(value: 10)
if case .bar(let value) = hoge {
    self.label.text = "Value = \(value)"
}
화면은 아래와 같다.

수정 후


여기서, 나는 바에 대해 약간의 정의를 추가하고 싶다.
enum Hoge {
    case foo(value: Int)
    case bar(value: Int, value2: Int)
}
정의가 추가되었기 때문에 정의 변수hoge에서 Missing argument for parameter 'value2' in call의 컴파일 오류가 발생할 수 있으므로 다음과 같이 변경합니다.
let hoge = Hoge.bar(value: 10, value2: 20)
그러나 실제 사용hoge된 곳에서는 컴파일 오류가 발생하지 않는다.
Enum 변경 전에 기술한 (이하 내용)도 욕먹지 않습니다.
if case .bar(let value) = hoge {
    self.label.text = "Value = \(value)"
}
실제로 상기 상태에서 운행을 시도하면 화면은 다음과 같다.

네.case .bar(let value)value(value: Int, value2: Int)의 원조가 대입되었다.

총결산


Enum의 AssociatedValue 정의를 변경하면 그곳을 사용하는 데 오류가 없으므로 주의해야 할 내용입니다.
※ 정의를 줄이면 사용하는 곳에서도 오류가 발생합니다.
예를 들어, bar(value: Int, value2: Int)에서 bar(value: Int)로 변경하면 Tuple pattern has the wrong length for tuple type '(value: Int)' 오류가 발생합니다.
이는 "절차 수정 시 영향범위를 조사해 모든 곳에서 동작을 확인하는 것"이라고 설명했다.이 일은 나로 하여금 이 기본을 다시 생각나게 했다.

좋은 웹페이지 즐겨찾기