gpt4 book ai didi

swift - 向 Swift 中的所有对象添加扩展/方法

转载 作者:搜寻专家 更新时间:2023-10-30 21:58:29 24 4
gpt4 key购买 nike

在Objective-C中,所有的对象都可以看作type id,几乎所有的对象都继承自NSObject。 ( block 没有,但这是唯一的异常(exception)。)

因此可以创建一个扩展所有 Objective-C 对象的 Objective-C 类别。 (忽略 block )

在 Objective-C 中,我创建了一个 NSObject 扩展,它使用关联对象来选择性地将字典附加到任何 NSObject。这使我能够实现 setAssocValue:forKey:assocValueForKey: 方法,从而可以将键/值对附加到任何 NSObject。这在很多情况下都很有用。

例如,它可以将存储的属性添加到类别中。您只需编写一个使用关联值方法附加存储对象的 getter/setter,然后就可以了。

它还可以在运行时将值附加到现有系统对象。您可以将数据或代码块卡在按钮上,或者做任何您需要做的事情。

我想在 Swift 中做同样的事情。

但是,Swift 没有像 Objective-C 那样的所有对象的公共(public)基类。 AnyObjectAny 是协议(protocol)。

因此,

extension AnyObject

不会编译。

我不知道在 Swift 中“附加”我的 setAssocValue:forKey:assocValueForKey: 方法的位置。

我可以为我的扩展创建一个基类,但这违背了使用扩展的意义。我可以将我的基础对象设为 Objective-C NSObject,但这意味着我的所有对象都必须是 NSObject,而 Swift 对象默认不是 NSObject。

(顺便说一句,这个问题适用于 Mac OS 和 iOS 平台)

最佳答案

没有。您几乎已经回答了您自己的问题——Swift 对象没有基类,解决它的唯一真正方法是从 NSObject 继承。

关于swift - 向 Swift 中的所有对象添加扩展/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30176009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com