扩展所有Swift对象

cfi*_*her 12 cocoa objective-c swift

在Objective C中Swift添加categoryover 时,是否可以扩展所有现有对象NSObject

根据这篇文章,所有Swift对象都继承自SwiftObject该类,但我无法为其添加扩展.

这有什么解决方案吗?

Rob*_*ier 11

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

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


就像一个注释,并非所有对象都从这NSObject两个对象继承,并且它不是语言要求.但是大多数人都这么认为你是正确的.看看NSProxyNSObject树的顶部(它实现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))
Run Code Online (Sandbox Code Playgroud)

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