swift 2.2:延迟属性中的可用初始值设定项

时间:2016-03-23 03:54:35

标签: swift initialization uifont lazy-initialization swift2.2

首先非常感谢您的帮助。我昨天刚刚升级了包含swift 2.2的Xcode。我遇到了一些问题,但我通过遵循" swift 2.2"中的新功能快速修复了它们。来自Natashatherobot的主题。但有一个问题我无法解决。它是关于UIFont的可用初始化器,它是在swift 2.2中引入的。附件是一段简单的代码,它将在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

enter image description here

错误是:(名称:字符串,大小:CGFloat) - > UIFont'不能转换为'(名称:字符串,大小:CGFloat) - > UIFont'?

我可以通过两种方式解决它:

方法1:不要放这一行: let font = UIFont(name: "somefont", size: 10) ?? UIFont.systemFontOfSize(10) 在“懒惰的实例化”中关闭。 (把它放在计算属性报告中没有错误)

方法2:而不是使用:

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

使用下面的代替(但我不认为这应该是正确的方法,因为它使初始化程序更多" objc"样式):

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

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

1 个答案:

答案 0 :(得分:2)

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