クラスを作成して、関数aを呼び出した後にそのサブクラスが型Selfの新しいオブジェクトを受け取るようにしたいと思います。私は、サブクラスにinit()メソッドがあることを保証しています。私は、オブジェクトのクローンを作成したいが、私は、元の変更された値を持つクローンを作成したいので、実際には、それ以上ですので、私は本当にswiftyコピーコンストラクタ構文Swiftのinitの外でインスタンス化する
を使用しないようにして
なぜ機能しないのですか?間違いなく:
func myCustomCopy(modificationCommand: Command) -> Test {
let newInt = modificationCommand.execute(self.myInt)
return Test(newInt: newInt)
}
は私が望むものではありません。
例:
protocol Testable {
var myInt: Int { get set }
init(newInt: Int)
}
class Test: Testable {
var myInt = 10
required init(newInt: Int) { myInt = newInt }
func myCustomCopy(modificationCommand: Command) -> Self {
let newInt = modificationCommand.execute(self.myInt)
return self.init(newInt: newInt)
}
}
1)なぜあなたは何を望んでいないのですか? – Alexander
2)最初に関数 'a()'が必要なのはなぜですか? – Alexander
3) 'a()'関数を完全に削除すると、最後のコードスニペットは完全に問題ありません。すべてのサブクラスはそのイニシャライザを持つ必要があります。サブクラス – Alexander