gpt4 book ai didi

swift - 不能继承 DispatchGroup - "only visible via the Objective-C runtime"吗?

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

不可能继承DispatchGroup,怎么办?

注意:

终于在 iOS 10+ 中修复了这个问题

例如,携带一个带状态的包,

class PushDispatchGroup: DispatchGroup {
var sentIds: [(tableName: String, rowId: String)] = []
}

感谢 shallowThought 指出这已在 iOS10 中修复。

最佳答案

how to inherit from a class which is 'only visible via the Objective-C runtime'?

你不知道。

这并没有像您想象的那样包裹在适当的“对象”周围。它包裹在 dispatch_group 周围,这是一个 C 结构。此类不是设计为子类化的,也不会以正常方式桥接到 ObjC,因此您也不能在那里对其进行子类化。

直接桥接到低级 C 类型的“对象”通常具有非常不寻常的结构,系统的某些部分被硬编码以知道如何处理(这种情况一直发生在像 NSString 这样的免费桥接中CFString)。在许多情况下,通过仔细选择结构,这些类型被设计为在内存布局中相同(我没有分开 DispatchGroup,但它看起来像是这一组中的一个)。当这是真的时,您不能添加任何存储,因为那样内存布局将不同并且您会破坏桥接。

正如许多评论者所说,您不应该这样做,这就是为什么如何没有简单的答案来做到这一点。未明确设计用于子类化的类在 Swift 中故意难以或不可能进行子类化(这经常出现在比 DispatchGroup 更简单的类型周围,答案是相同的:这是故意的;不要这样做它)。

关于swift - 不能继承 DispatchGroup - "only visible via the Objective-C runtime"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41210629/

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