无法将类型 'Foo!' 的值转换为预期的参数类型 'Foo!'
Cannot convert value of type 'Foo!' to expected argument type 'Foo!'
我对我已经 运行 好几次的事情感到困惑。我有时会收到类似于以下内容的错误
Cannot convert value of type 'Foo!' to expected argument type 'Foo!
'
我搜索过 SO,但没有真正找到任何可以解释为什么 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()
.
编辑:
请注意,上面的代码是为了说明我正在 运行 遇到的问题,而不是操作代码。
我想通了。我的视图模型是测试目标的一部分。将其设置为仅 运行 目标后,问题就解决了。仅供参考。
我对我已经 运行 好几次的事情感到困惑。我有时会收到类似于以下内容的错误
Cannot convert value of type 'Foo!' to expected argument type 'Foo!
'
我搜索过 SO,但没有真正找到任何可以解释为什么 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()
.
编辑: 请注意,上面的代码是为了说明我正在 运行 遇到的问题,而不是操作代码。
我想通了。我的视图模型是测试目标的一部分。将其设置为仅 运行 目标后,问题就解决了。仅供参考。