【发布时间】:2017-03-20 13:12:24
【问题描述】:
我创建了一个结构,让我的字体在全球范围内预缓存:
struct Fonts {
static let avenirRegular = UIFont(name: "AvenirNextCondensed-Regular", size: 14.0)
}
用法...:
xy.font = Fonts.avenirRegular
它告诉我,我的常量是可选的。
可选类型“UIFont?”的值未拆封;你的意思是用'!'还是“?”?
为什么它是可选的? AvenirNextCondensed-Regular 是否有可能并非在所有 iOS 设备上都可用?非常感谢您的帮助。
【问题讨论】:
-
名称是任意字符串,所以
UIFont(name: "!§%&()????wot???", size: 399)一定有机会返回nil。 -
如果您知道,即使在 Objective-C 中,如果您发送任意字符串作为字体名称,UIFont 的 init 方法也可以返回 null。在objective-c中,虽然初始化器是可为空的初始化器,这意味着你要么得到一个UIFont,要么返回null。为了表示这些可为空的初始化器(在 swift 中为 nilable),我们使用可选的返回类型,表示该方法可以返回某种类型的对象,否则它将返回 nil。