代码之家  ›  专栏  ›  技术社区  ›  Ted sabadow

数组类型推断显示奇怪的编译器错误

  •  -1
  • Ted sabadow  · 技术社区  · 7 年前

    我发现这些错误:

    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
    )
    
    1 回复  |  直到 7 年前
        1
  •  -1
  •   Ted sabadow    7 年前

    我们发现类型推断导致了这个问题,添加数组类型有助于编译器找到确切的问题。

    解决方案:

    let someArray: [SomeModel] = [
        ...
    ]