0
私は数回に分かれて何かに悩まされています。私は時々、次のタイプ '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())
}
}
Iは、例えば、無駄にvm.setFooModel(foo)
ためのバリエーションの数を試みましたvm.setFooModel(foo!)
またはfooをvar foo: Foo! = Foo()
と宣言してください。
編集: 上記のコードは、実行中の問題を説明するためのものであり、操作コードではありません。
'Foo'タイプはどこで宣言されていますか?異なるスコープ内に複数の 'Foo'が宣言されている可能性はありますか? –
私はあなたが変数 'foo'を宣言しているときには' Foo! 'を使い、他の場所では' Foo'だけを使う必要があると思います。 – 3stud1ant3
'setFooModel'と' getFooModel'メソッドのポイントは何ですか? 'foo'プロパティを公開しないのはなぜですか? 'getBar'メソッドと同じです。単純に 'bar'プロパティをパブリック・リード・アクセスで作るのはなぜですか? – rmaddy