Swift 数组类型推断显示奇怪的编译器错误
我发现以下错误: “字符串”不能转换为“字符串” “Double”不能转换为“Decimal” “日期”不能转换为“日期” 在下面的示例中Swift 数组类型推断显示奇怪的编译器错误,swift,type-inference,Swift,Type Inference,我发现以下错误: “字符串”不能转换为“字符串” “Double”不能转换为“Decimal” “日期”不能转换为“日期” 在下面的示例中 let someArray = [ SomeBuilder.build( someString: "someString", someDecimal: 100, someDate: Date.make(2018, 8, 20), somethingElse: 0 ), S
let someArray = [
SomeBuilder.build(
someString: "someString",
someDecimal: 100,
someDate: Date.make(2018, 8, 20),
somethingElse: 0
),
SomeBuilder.build(
someString: "someString",
someDecimal: 100,
someDate: Date.make(2018, 8, 20),
somethingElse: 0
),
SomeBuilder.build(
someString: "someString",
someDecimal: 100,
someDate: Date.make(2018, 8, 20),
somethingElse: 0
)
]
struct SomeBuilder {
static func build(
someString: String?,
someDecimal: Decimal,
someDate: Date,
somethingElse: Int
) -> SomeModel {
// do something here
return SomeModel()
}
}
extension Date {
static func make(_ year: Int, _ month: Int, _ day: Int) -> Date! {
let calendar = Calendar(identifier: .gregorian)
let components = DateComponents(
calendar: calendar,
year: year,
month: month,
day: day
)
return calendar.date(from: components)
}
}
struct SomeModel {
}
如果将此项添加为someArray
中的第四项(在实际场景中可能是意外),您将看到上述错误之一
SomeBuilder.build(
someString: "someString",
someDecimal: 100,
someDate: Date.make(2018, 8, 20),
somethingElsse: 0
)
我们发现类型推断导致了问题,添加数组类型有助于编译器找到确切的问题(如果有) 解决方案:
let someArray: [SomeModel] = [
...
]
您应该将您的问题以表格的形式包括所有相关代码。您当前的代码甚至无法编译,进行必要的更改以使其编译也会使您提到的错误消失。完成。这是一个奇怪的xcode行为,我希望有类似问题的人有一个完全不同的代码,但仍然不是,因为您的代码中有语法错误。
build
方法缺少func
关键字(假设它是一个函数),在最后一个输入参数类型之后有一个额外的,
,并且make
也缺少一个return
语句。完成。我不能在这里添加我的所有代码,但下面是复制它的步骤。build
函数没有somethingElse
输入参数,因此如果您去掉额外的参数,错误将消失,而不必使用类型注释。编译器错误是误导性的,您是对的,但是您提到的问题只能通过调用不存在的函数(向build
添加额外的输入参数)来触发,这显然是一个程序员错误。