swift - 无法将类型 'Foo!' 的值转换为预期参数类型 'Foo!'

标签 swift xctest

我对已经遇到过几次的事情感到困惑。我有时会收到类似于以下内容的错误

Cannot convert value of type 'Foo!' to expected argument type 'Foo!

'

我已经搜索过,但还没有真正找到任何可以解释为什么 Foo!与 Foo 不一样!

这是一个例子:

// 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) 的多种变体,但均无济于事,例如vm.setFooModel(foo!) 或将 foo 声明为 var foo: Foo! = Foo().

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

最佳答案

我明白了这一点。我的 View 模型是测试目标的一部分。当我将其设置为仅运行目标后,问题就解决了。仅供引用。

关于swift - 无法将类型 'Foo!' 的值转换为预期参数类型 'Foo!',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46167309/

相关文章:

ios - 使用swift阅读短信

ios - UItableview 行未在 swift4 中使用 Mapkit 显示

json - 无法在 swift 中调用类型 'Object' 的初始值设定项

ios - 使用 XCTest 测试 View 标题

ios - 在 iOS 测试中以编程方式模拟 GPS 位置

swift - 二元运算符 '~=' 不能应用于类型 'String' 和 'String?' 的操作数

ios - 返回屏幕后释放 UITableViewCell 的突出显示状态

ios - 使用 XCTest 点击 UI 元素时如何避免 NSInternalInconsistencyException?

ios - React Native iOS 没有构建

objective-c - Swift 单元测试方法是否可以处理可选设置为 nil