2017-09-29 8 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

Iおそらくあなたのクラスを表すジェネリック型を返す関数:ここ

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! 

は、あなたのswitch文を追加します。休憩は必要ありません。彼らは迅速に必要ではありません。あなたがフォールスルーを追加しない限り、新しいケースステートメントを開始すると前のステートメントが中断されます。

また、nilオプションがあるので、AnyClass?を返す必要があります。

+0

これを試したところ、 /Users/gab/Desktop/desktopAppli/mobileApp/mobileApp/GlobalCstes.swift:82:18:タイプ名の後に予想されるメンバー名またはコンストラクタコール /Users/gab/Desktop/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 
} 

戻り値の型は現在オプションです。それはあなたがゼロを返すことを許される唯一の方法です。

関連する問題