まず、あなたの助けに感謝します。昨日、Swift 2.2 を含む Xcode をアップグレードしました。いくつかの問題に直面しましたが、Natashatherobot の「swift 2.2 の新機能」のトピックに従ってすぐに修正しました。しかし、修正できない問題が 1 つあります。これは、swift 2.2 で導入された UIFont の失敗可能な初期化子に関するものです。添付されているのは、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' is not convertible to '(name: String, size: CGFloat) -> UIFont?'
次の 2 つの方法で修正できます。
方法 1: 次の行を入れない
let font = UIFont(name: "somefont", size: 10) ?? UIFont.systemFontOfSize(10)
でください: 「遅延インスタンス化」クロージャーに。(計算されたプロパティに入れてもエラーは報告されません)
方法 2: 以下を使用する代わりに:
UIFont(name: "somefont", size: 10)
代わりに以下を使用してください(ただし、初期化子をより「objc」スタイルにするため、これは正しいアプローチであるとは思いません):
UIFont.init(name: "somefont", size: 10)
しかし、怠惰なプロパティクロージャーでエラーが報告される理由はまだわかりません。誰かが私にいくつかの説明を与えることができれば、私は非常に感謝しています。