매개 변수에 전달 된 유형에 따라 다른 코드를 실행하는 switch 문을 사용하여 일반 함수 만들기

SwiftyJD

현재 나는 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관