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

时间:2017-12-04 00:33:12

标签: objective-c swift porting downcast

讨论了here;相似但不完全相同。

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?

我试过了:

  • 以防万一,删除和重置IB中的自定义类。
  • 将这行代码分成多个步骤。

现在这个工作了:

  • 使用MyView方法
  • 直接实例化init()

也就是说,我有一个MyView个实例:

myView  _TtC12YadaYada11MyView *  0x7f8bc05487d0

(因此,我可以想到一个解决方法:编写一个Swift MyView构造函数,它使用UIImageView并使用它构建自己。但我不应该这样做.Inn&#39那个幕后的人会在幕后做什么?)

1 个答案:

答案 0 :(得分:0)

问题似乎是通过在Identity Inspector的Custom Class部分中清除(设置)Inherit Module From Target视图的MyView布尔值来引起(修复)的。至少在从零开始的测试案例中。在我特定的移植挑战中,有3,000多个文件(以及50多个MyView s),可能存在混淆因素。但就目前而言,这就是答案。