gpt4 book ai didi

objective-c - NSUUID 可以通过继承来扩展吗?如何?

转载 作者:搜寻专家 更新时间:2023-11-01 06:24:15 31 4
gpt4 key购买 nike

最近(审查一些代码)我偶然发现了一个奇怪的现象,它导致我们的程序出现错误。

我们正在使用的 API 具有以下实现(我将用 Swift 编写,即使原始代码是在 Objective-C 中)

internal class MyUUID: NSUUID { }

这是完全没用的,因为它总是返回一个空实例。

出于解释目的,我将从我的 Playground 上粘贴代码。

例如:创建一个简单的 NSUUID 是这样的:

let a = NSUUID()
a.description //this creates a valid uuid

创建MyUUID应该是类似的

let b = MyUUID()
b.description //it returns an instance, but is completely empty.

但它不起作用。

进一步检查,发现 NSUUID 初始化器创建了一个 __NSConcreteUUID 实例,而 MyUUID 没有,而且无论我尝试做什么,它都不会创建合适的 UUID .

那么,我的问题是:是否可以创建 NSUUID 的子实现?

最佳答案

根据经验,您的证据似乎可以回答您自己的问题:这是不可能的。 NSUUID 看起来是一个类集群而不是单个类,这有效地阻止了子类化。

Aaron 的另一种想法:

实现一个具有 NSUUID 的对象,而不是一个对象。实现 -forwardingTargetForSelector: 并返回您的 NSUUID 实例。考虑重写 -isKindOfClass:,但除非万不得已,否则最好不要这样做。然后,您应该能够将您的类作为一个 NSUUID 传递给任何期望一个但他们不知道其中差异的人。

鉴于解决方案依赖于内置于动态消息传递中的回退机制,我怀疑没有 Swift 等价物;但是,如果您将类定义为 Objective-C,那么它应该同样适用于 Swift。

关于objective-c - NSUUID 可以通过继承来扩展吗?如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26538056/

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