gpt4 book ai didi

objective-c - 扩展所有 Swift 对象

转载 作者:IT王子 更新时间:2023-10-29 05:27:09 25 4
gpt4 key购买 nike

是否可以像在 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/

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