0
class SubClassType:SuperClassType {    

    override func copy() -> SubClassType {
        return super.copy() as SubClassType
    }
}

スーパー コピーが実装され、SubClassType はスーパー クラス タイプにプロパティを追加せず、その機能を変更するだけであることに注意してください。ビヘイビア ツリーに NSCopying のサポートを追加していたときに、そのように入力したところ、文句を言う人 (コンパイラ) が私に腹を立てなかったことに驚いたからです。私はこの時点で精神的にツリー構造に深く入り込んでおり、まだテストする準備ができていませんが、それが機能するかどうかを確認したかったのです。私は問題を考えすぎていますか?

4

3 に答える 3

0

これも失敗します。

import Cocoa


class A:NSObject {
    var something = "A's something"

    override func copy() ->AnyObject {
        let copy = A()
        copy.something = "A copy's something"
        return copy
    }
}

class SubA:A {

    override init() {
        super.init()
        self.something = "SubA something"
    }

    override func copy() ->SubA {

        return super.copy() as SubA
    }

}


let a = A()
let subA = SubA()

let b = a.copy() as A
let subB = subA.copy() as SubA
于 2014-11-28T02:00:11.597 に答える
0
class A:NSObject {
    var something = "A's something"

    override func copy() ->AnyObject {
        let copy = A()
        copy.something = "A copy's something"
        return copy
    }
}

class SubA:A {

    override init() {
        super.init()
        self.something = "SubA something"
    }

    override func copy() ->AnyObject {

        return super.copy() as SubA // error'd: EXC Breakpoint fail!
    }

}


let a = A()
let subA = SubA()

let b = a.copy() as A
let subB = subA.copy() as SubA

わかりました、本当に私は怠け者だったので、ディープ コピーを実行する必要はありませんでしたが、最終的には、Thanks Giving ディナーの後に私とコードについて説明します。

于 2014-11-28T01:48:16.007 に答える