UITextView font属性在iOS 9中是可选的,但它是否为零?

问题描述:

显然iOS 9已将UITextViewfont属性更改为Swift可选类型,并且我想知道是否可以安全地取消引用它,而无需明确设置或首先检查它是否为nil(至少现在是。未来做出这样的假设可能不是一个好主意)。UITextView font属性在iOS 9中是可选的,但它是否为零?

UITextView对象上的字体场其实可以是默认为零(暗示UITextView在某些系统提供的尺寸使用系统的默认字体)?或者将iOS 9 UITextView上的字体属性初始化为UIFont()对象,该对象的字体集和大小适合用户的iOS设置?

注意:我问的原因是,基于SO用户尝试更新答案(被SO社区拒绝的编辑),我想正确更新该答案以适应iOS 9/Swift 2.0,但目前无法进行调查或测试。我希望有人已经知道UITextView关于字体的变化/行为。

自我解释:

import UIKit 

let textView = UITextView() 
let font = textView.font 
// let fontUnwrapped = textView.font! // crashes 
textView.text = "hello" 
let fontUnwrapped = textView.font! // <UICTFont: 0x7fbb8c917180> font-family: "Helvetica"; ... 
+0

辉煌。谢谢。 – clearlight

是的,font属性可以是nil。我只是想这在Xcode 7.0.1一个游乐场(雨燕2.0):

let view = UITextView(frame: CGRectMake(0,0,100,100)) 
print(view.font) // "nil\n" 
if (view.font == nil) { 
    print("it is nil") // "it is nil\n" 
} 

但是,令人惊奇当你强迫它展开它不会崩溃! (编辑:请继续阅读,但事实并非如此)。

let font = view.font! 
print(font.description) 

输出:

字体家庭: “黑体”; font-weight: normal; font-style:normal; font-size:12.00pt

在iOS 9模拟器中观察到相同的行为。


Playground showing above experiment

更新

从@ MartinR在评论观察,我解开这导致它被分配的默认字体值view.font之前分配给view.text

所以,原始问题的答案是是的,它可以是nil,不应该强制未经测试 unwrapped。

+2

强制解缠是永远安全!你应该用'if let'语句解开'view.font'。 – mixel

+0

你反驳自己..它可以是零但是说武力解开可以吗? –

+0

@ mixel绝对正确。出于某种原因,强制解包使用'!' - 这是一个警告,应该非常谨慎地使用它。 – NRitH