13

まず、あなたの助けに感謝します。昨日、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)

しかし、怠惰なプロパティクロージャーでエラーが報告される理由はまだわかりません。誰かが私にいくつかの説明を与えることができれば、私は非常に感謝しています。

4

1 に答える 1