현재 나는 2 개의 제네릭을 받아들이고 그 제네릭을 기반으로 뭔가를하는 함수를 가지고 있습니다.
func drawPath <T, U>(from: T, to: U) {
switch (from, to) {
case is JMapWaypoint, is JMapWaypoint:
print("map")
case is JMapDestination, is JMapDestination:
print("destination")
default:
print("default")
}
}
문제는 케이스 라인에서 (예 : 케이스는 JMapDestination이고, JMapDestination입니다 :) 경고가 표시됩니다.
케이스가 실행되지 않습니다. '(T, U)'에서 관련없는 유형 'JMapDestination'으로 캐스트는 항상 실패합니다.
매개 변수가 일반적인 경우 아무것도 전달할 수 없어야합니까? 왜 이런 경고를하는지 모르겠습니다.
스위치 케이스에서 ,
실제로는 "OR"을 의미합니다. 예를 들면 :
let a = 1
switch a {
case 1, 3, 7:
print("xxx") // this will be run if a is 1 or 3 or 7
default: break
}
따라서 스위치 케이스는 is JMapWaypoint, is JMapWaypoint
" (from, to)
유형 JMapWaypoint
또는 (from, to)
유형 JMapWaypoint
"을 의미합니다. 글쎄, (from, to)
튜플이므로 유형이 될 수 없습니다 JMapWaypoint
.
다음과 같이 작성해야합니다.
case is (JMapWaypoint, JMapWaypoint):
대신.
그러나 어쨌든 이것은 당신이 제네릭을 남용하는 것처럼 보입니다. 메서드가 두 가지 유형에 대해서만 작동하는 경우 정의상 일반이 아닌 것입니다 drawPath
..
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다