是否可以扩展所有现有Swift
个对象,就像在目标C中添加category
NSObject
一样?
根据此article,所有Swift
个对象都从SwiftObject
类继承,但我无法为其添加扩展名。
有没有解决方案?
答案 0 :(得分:11)
没有。 Swift对象实际上并不从任何根基类继承。编译器可以插入一个作为实现细节,但语言没有这个。
解决方案是一个函数,通常是泛型函数,而不是方法。适用于“各种对象”的东西并没有真正封装。很少有动作适用于宇宙中每一个可以想象的事物。但是函数可以将绝对任何东西映射到其他任何东西,所以这里是一个更好的工具。
就像注释一样,所有对象也不会从NSObject
继承,而且它不是语言要求。但是大多数人都这么认为你是正确的。请查看NSProxy
作为非NSObject
树的顶部(它实现NSObject
协议,但不从NSObject
类继承)。这就是id
与NSObject*
不同的原因。
关于关联对象的问题,这是内置的:
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中也是一个函数,而不是一个方法。