Вывод типа массива показывает странные ошибки компилятора - PullRequest
0 голосов
/ 29 ноября 2018

Я получаю следующие ошибки:

«String» не может быть преобразовано в «String?»

«Double» не может быть преобразовано в «Decimal»

Дата?не конвертируется в «Дата»

В следующем примере

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 Ответ

0 голосов
/ 29 ноября 2018

Мы обнаружили, что вывод типа вызывает проблему, и добавление типа массива помогает компилятору найти точную проблему, если она есть.

Решение:

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