0
我很困惑,我遇到過幾次。我有時會收到類似以下無法轉換類型'Foo!'的值到預期的參數類型'Foo!'
Cannot convert value of type 'Foo!' to expected argument type 'Foo!
'
我已經搜查SO錯誤,但還沒有真正發現任何可以解釋爲什麼富!和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()
。
編輯: 請注意,上面的代碼是用於說明我遇到的問題,而不是操作代碼。
「Foo」類型聲明在哪裏?是否有可能在不同範圍內聲明多個'Foo'? –
我認爲在聲明變量foo時只需要使用'Foo!',而在其他地方只需使用'Foo' – 3stud1ant3
'setFooModel'和'getFooModel'方法有什麼意義?爲什麼不公開'foo'屬性? 'getBar'方法相同。爲什麼不簡單地使公共閱讀訪問的'bar'屬性? – rmaddy