2017-09-29 2 views
-1

신속하게 스위치 케이스에 대한 응답으로 클래스를 가져와야 할 때,이 함수로 컴파일 문제가 발생합니다. 귀하의 경우에는신속한 전환 후 클래스를 가져올 필요가 있습니까?

Swift Compiler Error Group 
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:68:18: Expected member name or constructor call after type name 
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:68:18: Use '.self' to reference the type object 
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:72:22: Cannot assign value of type 'BPMClass.Type' to type 'AnyClass.Protocol' (aka 'AnyObject.Type.Protocol') 
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:76:22: Cannot assign value of type 'BPMClass.Type' to type 'AnyClass.Protocol' (aka 'AnyObject.Type.Protocol') 
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:80:22: Cannot assign value of type 'ECGClass.Type' to type 'AnyClass.Protocol' (aka 'AnyObject.Type.Protocol') 
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:84:22: Nil cannot be assigned to type 'AnyClass.Protocol' (aka 'AnyObject.Type.Protocol') 
/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:87:12: Cannot convert return expression of type 'AnyClass.Protocol' (aka 'AnyObject.Type.Protocol') to return type 'AnyClass' (aka 'AnyObject.Type') 
+1

받고있는 오류를 포함 할 수 있습니까? 당신이 그 정보를 가지고 있다면 사람들은 훨씬 더 많은 것을 도울 수있을 것입니다. –

답변

2

나는 아마 당신의 클래스를 나타내는 제네릭 형식을 반환하는 함수 : 여기

func getOptClass(signal : String) -> AnyClass{ 

var result = AnyClass 

switch(signal){ 
    case "IntRR": 
     result = BPMClass.self 
     break 

    case "BPM": 
     result = BPMClass.self 
     break 

    case "ECG": 
     result = ECGClass.self 
     break 

    default: 
     result = nil 
     break 
} 
return result 
} 

는 오류입니다. 이 같은 것을 시도해 볼 수도 있습니다 : 여기에 T

func getOptClass<T>(signal : String) -> T { 
switch(signal) { 
    case "IntRR", "BPM": 
     return T as! BPMClass 
    case "ECG": 
     return T as! ECGClass 
    default: 
     return nil 
    } 
} 

때문에 모든 유형의 사용자가 만드는 모든 클래스를 나타냅니다. 각 스위치 케이스에서이 유형을 해당 클래스로 변환합니다. 특정 케이스를 처리하려는 경우에만 JAVA와 같은 break 문을 넣을 필요가 없습니다. 나는 또한 당신의 스위치를 단순화하고 나는 그것이 작동해야한다고 생각합니다.

+0

답해 주셔서 감사합니다. 그러나 컴파일 할 때 여전히이 오류가 있습니다 :'/Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:70:20 : 'BPMClass.Type'유형의 리턴 식을 반환 유형 'T' /Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:73:20 : 'ECGClass.Type'유형의 반환 표현식을 'T'유형을 반환 할 수 없습니다. /Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift : 76 : 20 : Nil은 반환 유형 'T'와 호환되지 않습니다. –

+0

BPMClass 및 다른 클래스의 코드를 게시 할 수 있습니까? – Arrabidas92

1

당신은 그 값을 설정하지, AnyClass로 결과를 선언해야합니다

var result: AnyClass! 

다음 스위치 문을 추가합니다. 당신은 휴식이 필요하지 않습니다. 그들은 신속하게 필요하지 않습니다. 당신이 추락을 추가하지 않는 한, 새 case 문을 시작하면 이전 문이 중단됩니다.

또한 nil 옵션이 있으므로 AnyClass?를 반환해야합니다.

+0

이미 시도했지만 오류가 발생했습니다. /Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:82:18 : 예상 멤버 이름 또는 형식 이름 뒤에 생성자 호출 /사용자/gab/데스크톱/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift : 82 : 26 : 형식 뒤에 값을 입력하여 유형의 값을 구성하십시오. /Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:82:26 : .self '는 타입 객체를 참조한다. –

0
func getOptClass(signal : String) -> AnyClass? { 
    var result: AnyClass? 

    switch(signal) { 
    case "IntRR", "BPM": 
     result = BPMClass.self 
    case "ECG": 
     result = ECGClass.self 
    default: 
     result = nil 
    } 

    return result 
} 

반환 유형이 이제 선택 사항입니다. 그것은 당신이 nil을 돌려 줄 수있는 유일한 방법입니다.

관련 문제