[Swift] Enum의 Associated Value의 정의를 바꾸면 탈절됩니다.
개시하다
매우 편리한 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)'
오류가 발생합니다.
이는 "절차 수정 시 영향범위를 조사해 모든 곳에서 동작을 확인하는 것"이라고 설명했다.이 일은 나로 하여금 이 기본을 다시 생각나게 했다.
Reference
이 문제에 관하여([Swift] Enum의 Associated Value의 정의를 바꾸면 탈절됩니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hagmon/items/90aeb411ddee1e03d858
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
예를 들어, 다음과 같은 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)'
오류가 발생합니다.
이는 "절차 수정 시 영향범위를 조사해 모든 곳에서 동작을 확인하는 것"이라고 설명했다.이 일은 나로 하여금 이 기본을 다시 생각나게 했다.
Reference
이 문제에 관하여([Swift] Enum의 Associated Value의 정의를 바꾸면 탈절됩니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hagmon/items/90aeb411ddee1e03d858
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
enum Hoge {
case foo(value: Int)
case bar(value: Int, value2: Int)
}
let hoge = Hoge.bar(value: 10, value2: 20)
if case .bar(let value) = hoge {
self.label.text = "Value = \(value)"
}
Enum의 AssociatedValue 정의를 변경하면 그곳을 사용하는 데 오류가 없으므로 주의해야 할 내용입니다.
※ 정의를 줄이면 사용하는 곳에서도 오류가 발생합니다.
예를 들어,
bar(value: Int, value2: Int)
에서 bar(value: Int)
로 변경하면 Tuple pattern has the wrong length for tuple type '(value: Int)'
오류가 발생합니다.이는 "절차 수정 시 영향범위를 조사해 모든 곳에서 동작을 확인하는 것"이라고 설명했다.이 일은 나로 하여금 이 기본을 다시 생각나게 했다.
Reference
이 문제에 관하여([Swift] Enum의 Associated Value의 정의를 바꾸면 탈절됩니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hagmon/items/90aeb411ddee1e03d858텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)