2017-09-12 3 views
0

나는 두세 번 실행 한 것에 당혹 스럽다. 가끔 다음과 같은'Foo!'유형의 값을 변환 할 수 없습니다. 예상 인수 유형 'Foo!'

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

'

내가 SO 검색 한과 유사한 오류가 발생할 수 있지만, 정말 왜 푸 설명 아무것도 발견하지 않았습니다! Foo와 같지 않습니다. 소용없이, 예를

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) 대한 다수의 변동을 시도한 다음은

// 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" 
    } 
} 

오류 발생 유닛 테스트이다 : 여기

는 예제 vm.setFooModel(foo!) 또는 foo를 var foo: Foo! = Foo()으로 선언하십시오.

편집 : 위의 코드는 내가 실행중인 문제를 설명하기위한 것으로 작동 코드가 아닙니다.

+0

'Foo'유형이 ​​선언 된 곳은 어디입니까? 서로 다른 범위 내에서 선언 된 하나 이상의'Foo'가있을 수 있습니까? –

+2

변수'foo'를 선언 할 때'Foo!'만 사용해야하고, 다른 곳에서는'Foo' 만 사용해야한다고 생각합니다. – 3stud1ant3

+0

'setFooModel'과'getFooModel' 메소드의 핵심은 무엇입니까? 'foo' 속성을 드러내지 않는 이유는 무엇입니까? 'getBar' 메소드와 같습니다. 왜 단순히'bar' 속성을 공개 읽기 권한으로 만듭니 까? – rmaddy

답변

0

나는 이것을 알아 냈다. 내 뷰 모델은 테스트 대상의 일부입니다. 실행 대상으로 만 설정하면 문제가 해결됩니다. 참고하시기 바랍니다.

관련 문제