13

首先非常感谢您的帮助。我昨天刚刚升级了包含 swift 2.2 的 Xcode。我遇到了一些问题,但我按照 Natashatherobot 的“swift 2.2 中的新功能”主题快速解决了这些问题。但是有一个问题我无法解决。这是关于 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?'

我可以通过两种方式修复它:

方法1:不要把这行: let font = UIFont(name: "somefont", size: 10) ?? UIFont.systemFontOfSize(10) 放在'lazy instantiation'闭包中。(把它放在计算属性中不会报错)

方法2:而不是使用:

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

改用下面的(但是我认为这不应该是正确的方法,因为它使初始化程序更具“objc”风格):

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

但是我仍然不明白为什么它会在惰性属性关闭中报告我错误。如果有人能给我一些解释,我将不胜感激。

4

1 回答 1

2

这可能是最新版本 xcode 的错误。那些在升级之前建立项目的人可能会遇到这个问题。任何有幸遇到此类问题的人都可以尝试在 swift 2.2 环境中开始一个新项目。

于 2016-03-23T08:18:50.283 回答