0
class SubClassType:SuperClassType {    

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

请注意,超级副本已实现,并且 SubClassType 不会向超级类类型添加任何属性,只会修改其功能。真的问,因为当我为行为树添加对 NSCopying 的支持时,我就这样输入了它,并且很惊讶抱怨者(编译器)没有生我的气。在这一点上,我对树结构的了解如此之深,还没有准备好进行测试,但有点想看看它是否可以工作。我是不是在想这个问题?

4

3 回答 3

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

好吧,我真的很懒惰,不想做一个深拷贝,但最后说的更多是关于我和感恩节晚餐后的代码。

于 2014-11-28T01:48:16.007 回答
0

你的方法

override func copy() -> AnyObject {
    let clone = super.copy() as SubClassType
    return clone
}

我的答案

我不确定您想要该方法做什么。

let clone = super.copy() as SubClassType

将常量静态类型clone为 类型SubClassType。它不会对对象进行任何更改。下一行代码

return clone

将返回值静态类型为AnyObject. 同样,它不会对对象进行任何更改。

代码与

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

当您不覆盖方法时,这是默认行为。

最后,您有 4 行代码与 0 行代码相同。

于 2014-11-28T01:41:36.727 回答
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 回答