エラー:それは、非パラメーターで「自己」を使用しているため、プロトコルのプロトコルの要件「インスタンス」は、非結果型位置共変のセルフを返すプロトコルメソッドをどのように実装しますか?
protocol Protocol {
var instance: Self {get}
}
class Class: Protocol {
var instance: Class {return Subclass()}
}
class Subclass: Class {}
を非最終クラス(「クラス」)によって満たすことができません
ここでは、私が望むものをC#で表現する方法を示します。 (C#は、私の知る限り、ジェネリックパラメータ "Self"は実際にSwiftから知っているSelfであることを強制する方法はありませんが、適切なことをするためのドキュメントとして十分機能します)
どのようにそれはスウィフトの将来のバージョンで見えるかもしれませんinterface Protocol<Self> where Self: Protocol<Self> {
Self instance {get;}
}
class Class: Protocol<Class> {
public Class instance {get {return new Subclass();}}
}
class Subclass: Class {}
...:私は私の問題に関連していることの一部をエミュレートしていますどのように
protocol Protocol {
typealias FinalSelf: Protocol where FinalSelf.FinalSelf == FinalSelf
var instance: FinalSelf {get}
}
class Class: Protocol {
var instance: Class {return Subclass()}
}
class Subclass: Class {}
:
protocol Protocol: ProtocolInstance {
static var instance: ProtocolInstance {get}
}
protocol ProtocolInstance {}
class Class: Protocol {
static var instance: ProtocolInstance {return Subclass()}
}
class Subclass: Class {}
そして、ここでは、私は私のコードの関連部分であると信じるものです:
protocol Protocol {
static var : Self? {get} // an existing instance?
static var : Self {get} // a new instance
func instanceFunc()
}
extension Protocol {
static func staticFunc() {
(??).instanceFunc()
}
}
バグのように見えますが、インスタンスメソッドでも同様の構文を使用できますが、クラスメソッドや静的プロパティでは機能しません。 [あなたはそれを提出しましたか?](http://bugreport.apple.com) – rickster
私はそれをコンパイルすることはできません。編集されました。 – Jessy
私はあなたの更新されたC#のサンプルコードは、私の 'typealias InstanceType'コードとまったく同じだと思います。行動の違いはありますか?あなたのC#で 'Subclass.instance()'を呼び出した場合、戻り値の型(実装ではなく変数型)が 'Class'になりますか? –