斯威夫特,无法施放类型的价值

Chr*_*sco 16 ios swift

我创建了一个子类UICollectionViewController并调用它LibraryCollectionViewController,并标记了项目和测试的两个复选框.它的故事板id也是LibraryCollectionViewController在界面构建器上设置其对应的类.

作为SwiftiOS测试的新手,我去尝试在我的测试用例中实例化所述视图控制器,如下所示:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let libraryCollectionVC = storyboard.instantiateViewControllerWithIdentifier("LibraryCollectionViewController") as! LibraryCollectionViewController
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Could not cast value of type 'MyApp.LibraryCollectionViewController' (0x1010b01f0) to 'MyAppTests.LibraryCollectionViewController' (0x10bd7f580).
Run Code Online (Sandbox Code Playgroud)

所以很明显它不是强制转换,但由于我还是Swift的新手,我发现自己无法确定错误本身是否由以下原因引起:

  1. 我在创建子类时做错了,我引用了另一个(Ergo the MyApp.[vc] vs MyAppTests.[vc])
  2. 使用铸造as!不正确
  3. 任何其他原因

如果提前感谢,任何帮助都会很感激.

更新1:当我创建视图控制器时,最后一步显示目标标题下的2个复选框,我启用了它们,这可能是原因吗?

Bri*_*yIE 10

我的问题是我NSBundle.mainBundle()从单元测试中引用,而我需要使用:

let bundle = NSBundle(forClass: self.classForCoder)
Run Code Online (Sandbox Code Playgroud)


Mat*_*hew 5

如果一个类是两个目标(可能是两个框架?)的成员,并且您的应用以某种方式引用一个框架,而单元测试目标则引用了第二个目标,则可能会发生这种情况。

因此,其中一个已编译的工件具有完全限定的类型,Framework1.MyClass而另一个则是Framework2.MyClass-且它们在运行时是不同的类,因为它们具有不同的名称空间。(即使两个类都是从同一个Swift源文件编译的)