小编fan*_*210的帖子

swift 2.2:懒惰属性中的可用初始值设定项

首先非常感谢您的帮助.我昨天刚刚升级了包含swift 2.2的Xcode.我遇到了一些问题但我通过遵循Natashatherobot的"swift 2.2中的新内容"主题来快速修复它们.但有一个问题我无法解决.这是关于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
    }()
Run Code Online (Sandbox Code Playgroud)

这是错误的屏幕截图

在此输入图像描述

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

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

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

方法2:而不是使用:

 UIFont(name: "somefont", size: 10)
Run Code Online (Sandbox Code Playgroud)

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

UIFont.init(name: "somefont", size: 10)
Run Code Online (Sandbox Code Playgroud)

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

initialization uifont lazy-initialization swift swift2.2

13
推荐指数
1
解决办法
800
查看次数