swift 2.2:惰性属性中的可失败初始化器
swift 2.2: failable initializers in lazy properties
首先非常感谢您的帮助。我昨天刚刚升级了 Xcode,其中包含 swift 2.2。我遇到了一些问题,但我按照来自 Natashatherobot 的 "what's new in 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
}()
Here is the screenshot of the error
错误是:(名称:字符串,大小:CGFloat)-> UIFont' 无法转换为“(名称:字符串,大小:CGFloat)-> UIFont?”
我可以通过两种方式修复它:
方法一:不要放这一行:
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)
但是我还是不明白为什么它会在lazy 属性闭包中报错。如果有人能给我一些解释,我将不胜感激。
这可能是最新版本 xcode 的错误。那些在升级之前设置项目的人可能会遇到这个问题。任何有幸遇到此类问题的人都可以尝试在 swift 2.2 环境中开始一个新项目。
首先非常感谢您的帮助。我昨天刚刚升级了 Xcode,其中包含 swift 2.2。我遇到了一些问题,但我按照来自 Natashatherobot 的 "what's new in 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
}()
Here is the screenshot of the error
错误是:(名称:字符串,大小:CGFloat)-> UIFont' 无法转换为“(名称:字符串,大小:CGFloat)-> UIFont?”
我可以通过两种方式修复它:
方法一:不要放这一行:
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)
但是我还是不明白为什么它会在lazy 属性闭包中报错。如果有人能给我一些解释,我将不胜感激。
这可能是最新版本 xcode 的错误。那些在升级之前设置项目的人可能会遇到这个问题。任何有幸遇到此类问题的人都可以尝试在 swift 2.2 环境中开始一个新项目。