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

时间:2015-10-18 18:17:06

标签: ios swift

显然iOS 9将UITextView font属性更改为Swift可选类型,我想知道!取消引用它是否安全,而无需为{{{{{{{ 1}}首先(至少目前为止。我意识到将来做出这样的假设可能不是一个好主意)。

默认情况下,新nil对象上的字体字段是否为零(暗示UITextView在某些系统提供的大小时使用默认系统字体)?或者,iOS 9 UITextView上的字体属性是否会初始化为UITextView对象,其字体集和大小适合用户的iOS设置?

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

2 个答案:

答案 0 :(得分:1)

是的,font属性可以是nil。我刚在Xcode 7.0.1(Swift 2.0)的Playground中试过这个:

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-family:“Helvetica”;字体重量:   正常; font-style:normal; font-size:12.00pt

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

Playground showing above experiment

<强>更新

从@ MartinR在评论中的观察结果来看,我在打开view.text之前分配给view.font,导致它被分配了默认字体值。

因此,原始问题的答案是是的,它可以是nil,不应在未经测试的情况下强制解包

答案 1 :(得分:1)

自我解释:

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"; ...