Сначала очень ценю вашу помощь. Я только что обновил Xcode вчера, который содержит быстрый 2.2. Я столкнулся с несколькими проблемами, но я быстро их исправил, следуя «тем, что нового в быстрых 2.2», от Natashatherobot. Но есть одна проблема, которую я не могу исправить. Речь идет о отказоустойчивых инициализаторах UIFont, которые были введены в swift 2.2. Приложен простой фрагмент кода, который будет сообщать об ошибке в swift 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
}()
Here is the screenshot of the error
Ошибка: (имя: String, размер: CGFloat) -> UIFont 'не конвертируются в' (имя: String, размер: 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)
Но я до сих пор не понимаю, почему он сообщит мне об ошибке в замыкании ленивой собственности. Я буду очень признателен, если кто-нибудь может дать мне несколько объяснений.
Действительно? Включение в явную 'init' делает эту работу? Ты гений! Вы должны просто дать это как ответ. Это серьезная ошибка, и вы уже нашли обходной путь. – matt
О, и если вы можете воспроизвести проблему, напишите отчет об ошибке с Apple. (Я не могу воспроизвести его, даже если он, кажется, очень много выскакивает.) – matt
Спасибо @matt, я думаю, что вы определенно можете реплицировать проблему, используя кусок кода, который я приложил, если вы очистили свой проект. Я не уверен, что это ошибка или поведение по умолчанию для ленивых свойств в swift 2.2. В то же время, если это произошло только на моем xcode, я попытаюсь сделать чистую установку вместо – fans3210