将 Objective-C 对象向下转换为 Swift 类型失败(静默)

Downcasting Objective-C object to Swift type fails (silently)

已讨论 ;相似但不完全相同。

MyViewUIImageView 的 Swift 子类。它编译并且它的界面出现在 DerivedData/.../*-Swift.h 文件中。但是在 Obj-C 中向下转换失败。代码:

MyView* myView = (MyView*)viewThatCameFromIB; 
// The Custom Class declared in IB inspector as MyView.

Xcode 变量查看器中这一行的结果:

myView  UIImageView *  0x7fc8e9417e00

这行代码执行没有失败。但可以肯定的是,尝试在 myView 变量上使用 MyView 功能会因未知选择器而崩溃。由于在 Obj-C 中转换成功,在 MyClass 被移植之前,它 应该 也应该在移植之后,n'est-ce pas?

我试过了:

现在这个有效:

也就是说,我得到了一个MyView实例:

myView  _TtC12YadaYada11MyView *  0x7f8bc05487d0

(因此,我可以想到一个解决方法:编写一个 Swift MyView 构造函数,它接受 UIImageView 并使用它来构造自身。但我不应该必须.这不就是落魄者在幕后做的事吗?)

问题似乎是通过在身份检查器的自定义 Class 部分清除(设置)MyView 视图的 Inherit Module From Target 布尔值引起(修复)的。至少在从头开始的测试用例中。在我的特定移植挑战中,有 3,000 多个文件(和 50 多个 MyViews),可能存在混杂因素。但现在,这就是答案。