首先非常感谢您的帮助。我昨天刚刚升级了包含 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)
但是我仍然不明白为什么它会在惰性属性关闭中报告我错误。如果有人能给我一些解释,我将不胜感激。