メソッドを戻り値タイプSelf
に変更する必要があります。 私はSelf
を使用しています。A
のサブクラスでも動作する必要があります。この修正では、戻り値のデータを作成するためのディスパッチ同期ブロックが必要になる可能性があるため、タイプSelf
のローカル変数を導入する必要があります。静的コンテキストでの自己型変数
エラー:
'Self' is only available in a protocol or as the result of a method in a class;
class A {
//...
}
class B:A {
//...
}
extension A {
static private func foo() -> Self {
var myVar: Self? //Error: 'Self' is only available in a protocol or as the result of a method in a class;
// Get data for myVar, potentially in a dispatch sync block on another queue
guard let safeVar = myVar else {
return someGarbagr
}
return myVar
}
}
意図している用法:
func someFunctionSomewhere() {
let instanceOfB = B.foo()
// use instanceOfB
}
私はすでに考えることができるすべてを試してみました:
type(of:Self)
Self.Type
...
私はそれを修正避けたいですいくつかの理由から一般的な方法に変更します。あなたはクラスの機能でオブジェクトのインスタンスを返すようにしようとしている
let instanceOfB: B = B.foo()
'foo'はどこにありますか?クラス?次に、クラス名を使用します。 – Sweeper
@スウィーパー私は質問に情報を追加しました。私は 'Self'を使ってサブクラスをサポートしています(これは必須です)。 – shallowThought
'myVar'を使って何をしようとしているのかは少し不明ですが、やや明確な例がありますか?それにもかかわらず、「自己」は現在、ちょっと変わったタイプです。 [型推論を使うことができます](https://gist.github.com/hamishknight/f8b077cd938c418d668cdeff81b6ed2d)、 'Self?'型の変数を取得します。なぜか、let someData = queue.sync {...}のような何かをしないでください。 return self.init(someData) '? – Hamish