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

Can't subclass DispatchGroup - "only visible via the Objective-C runtime"?

无法子类化 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'?

你不知道。

这并没有像您想象的那样 "object"。它包裹在一个 dispatch_group 周围,这是一个 C 结构。这个 class 不是设计为 subclassed 并且不会以正常方式连接到 ObjC,所以你也不能在那里 subclass 它。

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

正如各种评论者所说,您也 不应该 这样做,这就是 如何 没有简单答案的原因去做这个。 类 没有明确设计用于 subclassing 是故意难以或不可能在 Swift 中进行 subclass (这经常出现在比 DispatchGroup,答案是一样的:这是故意的;不要这样做)。