是否可以像在 Objective C 中的 NSObject
上添加 category
一样扩展所有现有的 Swift
对象?
根据这个article ,所有 Swift
对象都继承自 SwiftObject
类,但我无法为其添加扩展。
有什么解决办法吗?
最佳答案
没有。 Swift 对象实际上并不继承自任何根基类。编译器可能会插入一个作为实现细节,但语言 没有这个。
解决方案是一个函数,通常是一个通用函数,而不是一个方法。适用于“每种对象”的东西并没有真正封装。很少有行动适用于宇宙中所有可以想象的事物。但是函数绝对可以将任何东西映射到任何其他东西,因此这里是一个更好的工具。
请注意,并非所有 对象都继承自NSObject
,这不是语言要求。但你是对的,绝大多数人都这样做。查看非 NSObject
树顶部的 NSProxy
(它实现了 NSObject
协议(protocol),但不继承自 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 中也是一个函数,而不是方法。
关于objective-c - 扩展所有 Swift 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25663455/