objective-c - 扩展所有 Swift 对象

标签 objective-c cocoa swift

是否可以像在 Objective C 中的 NSObject 上添加 category 一样扩展所有现有的 Swift 对象?

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

有什么解决办法吗?

最佳答案

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

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


请注意,并非所有 对象都继承自NSObject,这不是语言要求。但你是对的,绝大多数人都这样做。查看非 NSObject 树顶部的 NSProxy(它实现了 NSObject 协议(protocol),但不继承自 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 中也是一个函数,而不是方法。

关于objective-c - 扩展所有 Swift 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25663455/

相关文章:

iphone - 如何确定用户在从我的应用调用电话时是否按下了“调用”或“取消”按钮?

objective-c - 有没有办法从 Windows 机器编译 mac 二进制文件?

swift - 将 NavigationBarController 设置为 rootViewController

arrays - Swift:放置整个数组的最有效方法?

php - 使用 PHP Response 来存储/使用数据

ios - 我想用两种不同的颜色显示 NSMutableArray 的对象

iphone - OAuthConsumer 和 Twitpic

ios - 类似于 Spotify 中的播放器模式转换

objective-c - NSTableView 中用于打开文件的按钮

objective-c - 实现 growl 时遇到的问题