无法转换'Foo'类型的值!预期的参数类型'Foo!'

时间:2017-09-12 03:11:46

标签: swift xctest

我被困了几次我感到困惑。我有时会得到类似于以下的错误

  

无法转换'Foo!'类型的值预期的参数类型'Foo!

我搜索了SO,但还没有真正找到解释为什么Foo的东西!与Foo不一样!。

以下是一个例子:

{
    $file = Storage::disks('local')->get($file);
    // then test if $file exists
}

以下是生成错误的单元测试:

// FooViewModel.swift
class FooViewModel: BaseViewModel {
    fileprivate var foo: Foo!
    fileprivate var bar: Bar = Bar()

    init!(model: Foo!) {
        super.init()
        foo = model
    }

    override init() {
        super.init()
    }

    func setFooModel(_ model: Foo!) {
        self.foo = model
    }

    func getFooModel() -> Foo! {
        return self.foo
    }

    func getBar() -> Bar {
        return bar
    }

    func getBlah() -> String {
        return "Blah"
    }
}

我尝试了import XCTest @testable import WooHoo class FooViewModelTests: XCTestCase { override func setUp() { super.setUp() } override func tearDown() { super.tearDown() } func testGetBar() { var foo = Foo() let vm = FooViewModel() // The following line generates the error vm.setFooModel(foo) XCTAssertEqual("Tell us your Foo for the Bar program.", vm.getBlah()) } } 的多种变体无济于事,例如vm.setFooModel(foo)或将foo声明为vm.setFooModel(foo!)

编辑: 请注意,上面的代码用于说明我遇到的问题,而不是操作代码。

1 个答案:

答案 0 :(得分:3)

我想出来了。我的视图模型是测试目标的一部分。在我将其设置为仅运行目标后,问题已解决。 FYI。