Значение типа '...' не соответствует '...' в присваивании - PullRequest
0 голосов
/ 26 апреля 2018

В проекте мы сталкиваемся со странной проблемой, когда prodocols не получает xcode.

Мы определили следующий протокол в обычном приложении:

protocol VCDismisser: class {
    func dismiss(animated: Bool, completion: (() -> Void)?)
}

extension UIViewController: VCDismisser {}

Внутри случайного ViewController мы определяем:

class RandomVC: UIViewController {
   lazy var vcDismisser: VCDismisser = self
}

В тестовой части XCProject мы хотим определить следующее:

class MockDismisser: VCDismisser {
    var dismissCalled = false
    func dismiss(animated: Bool, completion: (() -> Void)?) {
        dismissCalled = true
    }
}

И в любом тестовом примере для RandomVC мы хотим «внедрить» наш макет:

func testSuccessfulLoginDismisses() {
    let dismisser = MockDismisser()
    randomVC.vcDismisser = dismisser
    randomVC.viewDidLoad()
    mockviewModel.loggedIn.value = LoginState.successful
    XCTAssertTrue(dismisser.dismissCalled)
}

XCode теперь получает симпатичные помешательства и всегда говорит нам:

enter image description here

Что мы здесь делаем неправильно и как мы можем исправить, что xcode принимает его как правильный тип?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Причиной здесь было то, что не было очевидно в моем вопросе. Файл, содержащий расширение и протокол, имел целевое членство test и приложение, вызывающее путаницу xcode. Удаление целевого членства в тесте решило проблему.

0 голосов
/ 26 апреля 2018

Попробуйте использовать Mock Dismisser как VCDismisser:

let dismisser: VCDismisser = MockDismisser()
...