为什么我得到“UIFont未解包的可选类型的值”,但展开会给出“在解开可选项时意外发现的nil”?

时间:2016-02-22 12:32:09

标签: ios swift optional uifont forced-unwrapping

func initializePickerViewProperties() {
    let font = UIFont (name: "SanFranciscoDisplay-Regular", size: 30.0)
    let highlightedFont = UIFont (name: "SanFranciscoDisplay-Bold", size: 35.0)
    pickerView.font = font!
    pickerView.highlightedFont = highlightedFont!
}

相当简单,有问题的pickerView是TimingLogger

如果我删除强制解包,我会收到编译错误。 “可选类型的值UIFont未解包,你的意思是使用”!“还是”?“?”

但是,当我强行打开它时,我收到运行时错误。 “致命错误:在打开可选值时意外发现nil”

3 个答案:

答案 0 :(得分:3)

表示您的字体未正确初始化并提供nil。你应该安全地打开它们:

func initializePickerViewProperties() {
    if let font = UIFont (name: "SanFranciscoDisplay-Regular", size: 30.0),
        let highlightedFont = UIFont (name: "SanFranciscoDisplay-Bold", size: 35.0) {
        pickerView.font = font
        pickerView.highlightedFont = highlightedFont
    }
}

答案 1 :(得分:2)

尝试打印所有可用字体,并检查字体名称的拼写

 for fontfamily in UIFont.familyNames{
        for fontname in UIFont.fontNames(forFamilyName: fontfamily){
            print(fontname)
        }
    }

答案 2 :(得分:0)

您必须先在 Info.plist 中添加自定义字体

要查找 Info.plist 文件:

  1. 确保已将自定义字体导入到项目中。
  2. 单击项目导航器最顶部(项目本身)上的蓝色图标。
  3. 转到信息标签。
  4. 查找应用程序提供的字体
  5. 然后,点击加号图标,将新的键值对添加到我们的Info.plist。
  6. 添加您导入的字体的确切文件名,包括文件扩展名

我用这个解决了我的问题。希望它也对您有用。