【发布时间】:2015-12-24 04:39:29
【问题描述】:
想象一个水果类:
class Fruit: NSObject {
override var description:String {
return super.description
}
}
var apple = Fruit()
var banana = Fruit()
print(apple) // Output: <MyProject.Fruit: 0x7fa719627e00>
print(banana) // Output: <MyProject.Fruit: 0x7fa71962dab0>
问题:你如何模仿这个输出?
我目前有以下:
class Fruit: NSObject {
override var description:String {
print(super.description)
return "<\(NSStringFromClass(self.dynamicType)): 0x\(String(self.hash, radix:16))>"
}
}
现在输出以下内容:
<MyProject.Fruit: 0x7fb958c289a0>
<MyProject.Fruit: 0x7fb958c289a0>
<MyProject.Fruit: 0x7fb958c22df0>
<MyProject.Fruit: 0x7fb958c22df0>
如您所见,输出与我想要的相同。现在我想知道这是否是模仿其输出的正确方法,或者我忽略了下面 cmets 中提到的某些内容。
致谢:Matt、Martin R 和 Vacawama
【问题讨论】:
-
你的类是如何定义的?如果你不覆盖它,
self.description会打印什么? -
“这给了我完全相同的输出 print(super.description) 会做”不,它没有,因为哈希不是内存地址。这似乎是一个没有提出你真正想要答案的问题的情况......
-
对不起让我改写问题。
-
我重写了这个问题,这样更好吗?
-
@Mark:如果你不覆盖描述方法,那么你会得到相同的输出,因为描述方法是从 NSObject 继承的。
标签: swift class dynamictype