Но не удалось в Xcode 10.3, но работать в Xcode 11.3 - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть кусок кода, который без проблем собирается в Xcode 11.3, но не работает в Xcode 10.3. Я думаю, это потому, что Xcode 10.3 не имеет необходимого компилятора. Код реализует уведомления pu sh, которые не работают в Xcode 11.3, но работают в Xcode 10.3 (что-то связанное с this - вот почему я хочу встроить Xcode 10.3). Что я могу сделать, чтобы встроить Xcode 10.3?

Обновление с кодом:

func signalRecipients(transaction: SDSAnyReadTransaction) -> [SignalRecipient] {
    e164sForIntersection.compactMap { e164Number in
        let address = SignalServiceAddress(phoneNumber: e164Number)
        return SignalRecipient.registeredRecipient(for: address, mustHaveDevices: true, transaction: transaction)
    }
}

В Xcode 11.3 нет ошибок. В Xcode 10.3: «Невозможно определить тип возврата сложного замыкания; добавить явный тип для устранения неоднозначности»

    var hasViewed: Bool { firstViewedTimestamp > 0 }

В Xcode 11.3 нет ошибок. В Xcode 10.3: «Отсутствует return в функции, ожидающей возврата« Bool »».

Я думаю, что поведение связано с компилятором из Xcode 10.3. Могу ли я как-то использовать компилятор из Xcode 11.3 в Xcode 10.3?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Я думаю, что поведение связано с компилятором из Xcode 10.3.

Конечно, это так.

Могу ли я каким-то образом использовать компилятор из Xcode От 11.3 до Xcode 10.3?

Нет: вы пишете код, который работает с обоими компиляторами.

Давайте проясним ситуацию. Это связано только косвенно с версией Xcode. Что действительно важно, так это версия Swift . Различные версии Swift имеют разные компиляторы и разные языковые правила, так как язык развивается со временем.

Давайте возьмем вторую:

var hasViewed: Bool { firstViewedTimestamp > 0 }

В Xcode 11.3 нет ошибок. В Xcode 10.3: «Отсутствует return в функции, которая, как ожидается, вернет Bool».

Исправить. В Swift 5.1 было введено новое правило, согласно которому разрешено опускать ключевое слово return в теле функции из одной строки. Но правило новое, поэтому для более ранней версии Swift вы все равно должны сказать, что по-старому:

var hasViewed: Bool { return firstViewedTimestamp > 0 }

Это будет работать как для старых, так и для новых версий Swift, так что просто используйте это и все будет хорошо.

1 голос
/ 10 февраля 2020

Сообщения об ошибках сообщают вам, что вам нужно знать.

  • Первое - это выражение, которое слишком сложно для интерференции типов для 10.3, поэтому дайте ему несколько типов. Как и e164Number в -> независимо от типа.

  • Второй четко говорит вам, что вы не возвращаете выражение bool. Глядя на код, правда, там нет оператора return. Так что добавьте заявление о возврате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...