Подтвердить что ты не робот

Swift 2.2: неудачные инициализаторы в ленивых свойствах

Сначала очень ценю вашу помощь. Я только что обновил Xcode вчера, который содержит быстрый 2.2. Я столкнулся с несколькими проблемами, но я быстро их исправил, следуя "тем, что нового в быстрых 2.2", от Natashatherobot. Но есть одна проблема, которую я не могу исправить. Это о неудачных инициализаторах UIFont, которые были введены в быстрой 2.2. Приложен простой фрагмент кода, который будет сообщать об ошибке в swift 2.2. Он может не сообщать об ошибке немедленно, пока я не очистил проект.

lazy var somelabel: UILabel = {

        let label = UILabel()
        let font = UIFont(name: "somefont", size: 10) ?? UIFont.systemFontOfSize(10) //this line gave me error
        label.font = font
        label.text = "Calculating..."

        return label
    }()

Вот скриншот ошибки

введите описание изображения здесь

Ошибка: (name: String, size: CGFloat) → UIFont 'не конвертируется в' (name: String, size: CGFloat) → UIFont? '

Я могу исправить это двумя способами:

Способ 1: не помещайте эту строку: let font = UIFont(name: "somefont", size: 10) ?? UIFont.systemFontOfSize(10) в закрытии "ленивого экземпляра". (Положите его в вычисленные свойства, сообщает об ошибке)

Способ 2: вместо использования:

 UIFont(name: "somefont", size: 10)

используйте ниже (но я не думаю, что это должен быть правильный подход, потому что он делает инициализатор более "objc" ):

UIFont.init(name: "somefont", size: 10)

Но я до сих пор не понимаю, почему это сообщит мне об ошибке в закрытии закрытой собственности. Я буду очень признателен, если кто-нибудь может дать мне несколько объяснений.

4b9b3361

Ответ 1

Это может быть ошибка последней версии xcode. Те, чей проект был настроен до обновления, могут столкнуться с этой проблемой. Любой, кому посчастливилось столкнуться с такой проблемой, может попытаться запустить новый проект в среде SWIFT 2.2.