无法将类型 'X' 的值转换为预期的参数类型 'X'
Cannot convert value of type 'X' to expected argument type 'X'
Xcode 8 和 Swift 3 今天让我很伤心:(
请查看并告诉我您是否遇到过类似的问题以及是否可以修复它。我一直在尝试不同的解决方案,其中包括:
- Cmd + Shift + K
- Cmd + Shift + Option + K
- 删除派生数据
- 更改使用的结构(它是我代码中的嵌套结构),将其展平,更改为真正基本的结构
更新 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)
结构如下:
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]
}
}
}
}
在 viewController 中,事情看起来像这样:
func display(roundModel: Quiz.NewRoundDetails.ViewModel) {
...
}
我认为没有什么不寻常的。我刚刚发现了另一件事 - 代码在应用程序目标端运行良好,但不适用于测试目标。
我没有更多的想法 atm...你能帮我吗?我也创建了雷达
好的,我知道了...
我已经使用 @testable
导入了我的应用程序模块,并且我已经将带有模型 类 的 .swift 文件添加到测试目标。可能已创建 <MyTestModule>. Quiz.NewRoundDetails.ViewModel
而不是 <MyAppModule>. Quiz.NewRoundDetails.ViewModel
检查这个答案:Stack Overflow
这可能是定位问题。如果您在测试文件的顶部使用 @testable 关键字,并且您的主项目文件也以您的测试为目标,那么测试将引用两个不同的文件。所以你的文件应该只针对测试(如果它们是测试文件)或主项目。如果他们都选中取消选中一个并使用测试文件顶部的@testable import [your project's name]。
Xcode 8 和 Swift 3 今天让我很伤心:(
请查看并告诉我您是否遇到过类似的问题以及是否可以修复它。我一直在尝试不同的解决方案,其中包括:
- Cmd + Shift + K
- Cmd + Shift + Option + K
- 删除派生数据
- 更改使用的结构(它是我代码中的嵌套结构),将其展平,更改为真正基本的结构
更新 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)
结构如下:
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]
}
}
}
}
在 viewController 中,事情看起来像这样:
func display(roundModel: Quiz.NewRoundDetails.ViewModel) {
...
}
我认为没有什么不寻常的。我刚刚发现了另一件事 - 代码在应用程序目标端运行良好,但不适用于测试目标。
我没有更多的想法 atm...你能帮我吗?我也创建了雷达
好的,我知道了...
我已经使用 @testable
导入了我的应用程序模块,并且我已经将带有模型 类 的 .swift 文件添加到测试目标。可能已创建 <MyTestModule>. Quiz.NewRoundDetails.ViewModel
而不是 <MyAppModule>. Quiz.NewRoundDetails.ViewModel
检查这个答案:Stack Overflow
这可能是定位问题。如果您在测试文件的顶部使用 @testable 关键字,并且您的主项目文件也以您的测试为目标,那么测试将引用两个不同的文件。所以你的文件应该只针对测试(如果它们是测试文件)或主项目。如果他们都选中取消选中一个并使用测试文件顶部的@testable import [your project's name]。