2016-05-01 8 views
0

を許可しない:ストアドプロパティは、次のコードが動作するローカル変数に

class Test { 
    let api = "abc" 
    let apiParam = { 
     return ["api": api] 
    }() 
} 

しかし、一定のAPIはapiParamプロパティに移動したとき、私はエラーを取得する:「} {タイプの閉鎖を呼び出すことはできません - > _の引数リスト付き_

class Test { 
    let apiParam = { 
     let api = "abc" 
     return ["api": api] 
    }() 
} 

ただし、定数を実際の値に置き換えるとエラーが取り除かれます。

class Test { 
    let apiParam = { 
     return ["api": "abc"] 
    }() 
} 
+0

この行を次のように置き換えると、同じエラーが発生します: 'return [" api ":" abc "]' – brimstone

+0

@brimstoneそうではありません。 – Boon

答えて

1

これは、十分なタイプ情報を提供していないことを伝えるSwiftの秘密の方法です。通常、型をかなり効果的に推論することができますが、時にはの闘争が、通常はクロージャーの周りにできます。タイプapiParamを明示的に定義すると、エラーは解決されます。

class Test { 
    let apiParam:[String:String] = { 
     let api = "abc" 
     return ["api": api] 
    }() 
} 

最初の例はコンパイルされませんが、instance member 'api' cannot be used on type 'Test'エラーが発生します。これは、selfがインスタンスではなくそのスコープの静的クラスを参照するためです。つまり、apiプロパティにアクセスすることはできません。

あなたはapiParam遅延プロパティを作成する必要があると思いますいずれか(それが作成されていますように、ときに最初にアクセスそれ、インスタンスを参照しますselfを意味する)、それはクラスレベルで利用可能ですので、またはapiは、静的にします。

関連する問題