2016-03-23 8 views
13

Сначала очень ценю вашу помощь. Я только что обновил 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

enter image description here

Ошибка: (имя: 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) 

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

+1

Действительно? Включение в явную 'init' делает эту работу? Ты гений! Вы должны просто дать это как ответ. Это серьезная ошибка, и вы уже нашли обходной путь. – matt

+1

О, и если вы можете воспроизвести проблему, напишите отчет об ошибке с Apple. (Я не могу воспроизвести его, даже если он, кажется, очень много выскакивает.) – matt

+0

Спасибо @matt, я думаю, что вы определенно можете реплицировать проблему, используя кусок кода, который я приложил, если вы очистили свой проект. Я не уверен, что это ошибка или поведение по умолчанию для ленивых свойств в swift 2.2. В то же время, если это произошло только на моем xcode, я попытаюсь сделать чистую установку вместо – fans3210

ответ

2

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

+1

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. - [Из обзора] (/ review/low-quality-posts/11741417) – veljasije

+0

Пожалуйста, не добавляйте «спасибо» в качестве ответа. Вместо этого ** [принять ответ] (http://stackoverflow.com/help/accepted-answer) **, который вы нашли наиболее полезным. - [Из обзора] (/ review/low-quality-posts/11741417) – PVitt

+0

@PVitt. Хорошо, я вижу. Поскольку эта проблема может быть ошибкой xcode, я немного отредактирую свое решение. – fans3210

 Смежные вопросы

  • Нет связанных вопросов^_^