为什么字体是可选的?

Why is the font optional?

我创建了一个结构来让我的字体在全球范围内预缓存:

struct Fonts {
    static let avenirRegular = UIFont(name: "AvenirNextCondensed-Regular", size: 14.0)
}

用法...:

xy.font = Fonts.avenirRegular

它告诉我,我的常量是可选的。

Value of optional type 'UIFont?' not unwrapped; did you mean to use '!' or '?'?

为什么它是可选的? AvenirNextCondensed-Regular 是否有可能并非在每个 iOS 设备上都可用?非常感谢帮助。

您为 UIFont 使用的初始化程序是 return 可选 UIFont? 对象,即您收到包装可选建议的原因。

init?(name fontName: String, size fontSize: CGFloat)

查看 UIFontApple Documentation 了解更多详情。

这里的 "optional" 意味着问题是字体可能不存在(即使我们知道它存在)并且你必须识别它,通过将它设为可选你告诉编译器我知道字体不是您图书馆的一部分,但我确定它在那里。

只需使用强制展开来防止这种情况:

struct Fonts {
    static let avenirRegular = UIFont(name: "AvenirNextCondensed-Regular", size: 14.0)!
}