不能继承 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 类型的结构通常具有非常不寻常的结构,系统的某些部分被硬编码以知道如何处理(这种情况一直发生在免费桥接中,例如NSString
和 CFString
)。在许多情况下,通过仔细选择结构,类型被设计为在内存布局中相同(我没有分开 DispatchGroup
,但它看起来像这一组中的一个)。如果是这样,您将无法添加任何存储,因为那样内存布局将不同并且您会破坏桥接。
正如各种评论者所说,您也 不应该 这样做,这就是 如何 没有简单答案的原因去做这个。 类 没有明确设计用于 subclassing 是故意难以或不可能在 Swift 中进行 subclass (这经常出现在比 DispatchGroup
,答案是一样的:这是故意的;不要这样做)。
无法子类化 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 类型的结构通常具有非常不寻常的结构,系统的某些部分被硬编码以知道如何处理(这种情况一直发生在免费桥接中,例如NSString
和 CFString
)。在许多情况下,通过仔细选择结构,类型被设计为在内存布局中相同(我没有分开 DispatchGroup
,但它看起来像这一组中的一个)。如果是这样,您将无法添加任何存储,因为那样内存布局将不同并且您会破坏桥接。
正如各种评论者所说,您也 不应该 这样做,这就是 如何 没有简单答案的原因去做这个。 类 没有明确设计用于 subclassing 是故意难以或不可能在 Swift 中进行 subclass (这经常出现在比 DispatchGroup
,答案是一样的:这是故意的;不要这样做)。