类型'...'的值在赋值时不符合'...'

时间:2018-04-26 14:20:27

标签: swift xcode interface protocols

在一个项目中,我们遇到了一个奇怪的问题,因为xod没有获取产品协议。

我们在常规应用中定义了以下协议:

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 :(得分:0)

这里的原因是我的问题并不明显。包含扩展名和协议的文件具有测试的目标成员资格和导致xcode混淆的应用程序。删除测试的目标成员资格确实解决了这个问题。

答案 1 :(得分:-1)

尝试将Mock dissmisser投射为VCDismisser:

let dismisser: VCDismisser = MockDismisser()