扩展所有Swift对象

时间:2014-09-04 10:44:58

标签: objective-c cocoa swift

是否可以扩展所有现有Swift个对象,就像在目标C中添加category NSObject一样?

根据此article,所有Swift个对象都从SwiftObject类继承,但我无法为其添加扩展名。

有没有解决方案?

1 个答案:

答案 0 :(得分:11)

没有。 Swift对象实际上并不从任何根基类继承。编译器可以插入一个作为实现细节,但语言没有这个。

解决方案是一个函数,通常是泛型函数,而不是方法。适用于“各种对象”的东西并没有真正封装。很少有动作适用于宇宙中每一个可以想象的事物。但是函数可以将绝对任何东西映射到其他任何东西,所以这里是一个更好的工具。


就像注释一样,所有对象也不会从NSObject继承,而且它不是语言要求。但是大多数人都这么认为你是正确的。请查看NSProxy作为非NSObject树的顶部(它实现NSObject协议,但不从NSObject类继承)。这就是idNSObject*不同的原因。


关于关联对象的问题,这是内置的:

import Foundation

class Thing { }

let thing = Thing()

var MyKey: Character = "0"

objc_setAssociatedObject(thing, &MyKey, "I'm a value!", objc_AssociationPolicy(OBJC_ASSOCIATION_COPY))

println(objc_getAssociatedObject(thing, &MyKey))

这是你想要创造的吗?请注意,objc_setAssociatedObject在ObjC中也是一个函数,而不是一个方法。