2017-09-12 11 views
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()と宣言してください。

編集: 上記のコードは、実行中の問題を説明するためのものであり、操作コードではありません。

+0

'Foo'タイプはどこで宣言されていますか?異なるスコープ内に複数の 'Foo'が宣言されている可能性はありますか? –

+2

私はあなたが変数 'foo'を宣言しているときには' Foo! 'を使い、他の場所では' Foo'だけを使う必要があると思います。 – 3stud1ant3

+0

'setFooModel'と' getFooModel'メソッドのポイントは何ですか? 'foo'プロパティを公開しないのはなぜですか? 'getBar'メソッドと同じです。単純に 'bar'プロパティをパブリック・リード・アクセスで作るのはなぜですか? – rmaddy

答えて

0

私はこれを理解しました。私のビューモデルはテスト対象の一部でした。実行目標に設定した後、問題は解決しました。 FYI。

関連する問題