无法将类型'X'的值转换为预期的参数类型'X'

Mac*_*nik 7 xcode swift swift3 xcode8

Xcode 8和Swift 3让我今天很伤心:(

请看看,告诉我你是否有这样的东西,如果有可能修复它.我一直在尝试不同的解决方案,其中包括:

  1. Cmd + Shift + K.
  2. Cmd + Shift + Option + K.
  3. 删除派生数据
  4. 更改使用过的struct(它是我的代码中的嵌套结构),将其展平,更改为非常基本的结构

悲伤的Xcode错误

更新1:

这是代码(虽然我认为它不一定是与我的实现相关的问题),但它在我的测试目标中:

let viewModelStub: Quiz.NewRoundDetails.ViewModel = Quiz.NewRoundDetails.ViewModel(roundNumber: "", score: "", proposedAnswerParts: [
            Quiz.NewRoundDetails.ViewModel.AnswersForComponent(answers: []),
            Quiz.NewRoundDetails.ViewModel.AnswersForComponent(answers: []),
            Quiz.NewRoundDetails.ViewModel.AnswersForComponent(answers: [])])

_ = viewController.view
viewController.display(roundModel: viewModelStub)
Run Code Online (Sandbox Code Playgroud)

结构如下:

struct Quiz {
    struct NewRoundDetails {
        struct Response {
            let roundNumber: Int
            let score: Int
        }
        struct ViewModel {
            let roundNumber: String
            let score: String
            let proposedAnswerParts: [Quiz.NewRoundDetails.ViewModel.AnswersForComponent]

            struct AnswersForComponent {
                let answers: [String]
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在viewController中,事情如下所示:

func display(roundModel: Quiz.NewRoundDetails.ViewModel) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我认为没有什么不寻常的.我刚刚发现了一件事 - 代码在应用程序目标端正常工作,它不适用于测试目标.

我没有更多的想法...你能帮助我吗?我也创造了雷达

dav*_*ynn 17

检查这个答案:Stack Overflow

这可能是目标问题.如果您在测试文件的顶部使用@testable关键字,并且主项目文件也针对您的测试,则测试指的是两个不同的文件.因此,您的文件应仅针对测试(如果它们是测试文件)或主项目.如果他们都选中了取消选中的一个并使用测试文件顶部的@testable导入[您的项目名称].在此输入图像描述


Mac*_*nik 3

好,我知道了...

我已经导入了我的应用程序的模块,@testable并且还将带有模型类的 .swift 文件添加到了测试目标。可能<MyTestModule>. Quiz.NewRoundDetails.ViewModel已经被创建而不是<MyAppModule>. Quiz.NewRoundDetails.ViewModel