UITextView*font*属性在iOS 9中是可选的。默认为零吗?

UITextView*font*属性在iOS 9中是可选的。默认为零吗?,ios,swift,Ios,Swift,显然,iOS 9将UITextView.font属性更改为Swift可选类型。这是否意味着新UITextView对象上的font属性可能为nil(意味着必须测试其是否为nil) 如果新构造的UITextView对象上的字体属性为nil,这是否意味着UITextView将使用默认系统字体,或者以某种方式选择用户指定的默认字体?是的,font属性可以为nil。我刚刚在Xcode 7.0.1(Swift 2.0)中的一个操场上尝试了这一点: 但是,令人惊讶的是,当您强制打开它时,它不会崩溃!(编辑:继

显然,iOS 9将
UITextView.font
属性更改为Swift可选类型。这是否意味着新UITextView对象上的font属性可能为nil(意味着必须测试其是否为nil)


如果新构造的UITextView对象上的字体属性为nil,这是否意味着UITextView将使用默认系统字体,或者以某种方式选择用户指定的默认字体?

是的,
font
属性可以为
nil
。我刚刚在Xcode 7.0.1(Swift 2.0)中的一个操场上尝试了这一点:

但是,令人惊讶的是,当您强制打开它时,它不会崩溃!(编辑:继续阅读,事实并非如此)

输出:

字体系列:“Helvetica”;字体大小: 正常;字体风格:普通;字体大小:12.00pt

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


更新

根据@MartinR在评论中的观察,在展开
视图.font
之前,我将其分配给
视图.text
,这导致将其分配为默认字体值

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

不言自明:

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"; ...
导入UIKit
让textView=UITextView()
让font=textView.font
//让fontUnwrapped=textView.font!//撞车
textView.text=“你好”
让fontUnwrapped=textView.font!//字体系列:“Helvetica”。。。

强制展开永远都不安全!如果让陈述,你应该用
打开
视图.font
。你自相矛盾。。它可以是零,但说强制展开可以吗?@mixel完全正确。强制展开使用
出于一个原因——这是一个警告,应该非常非常谨慎地使用它。这非常有趣,值得尝试去理解。很抱歉,你为了一个高尚的回答而受到如此严厉的惩罚。我已经从你的研究中学到了一些东西,而你肯定没有说教去做错事。希望人们能够在回顾中撤销他们的否决票,并在评论中简单地讨论折衷。在您的游乐场屏幕截图中,您为
view.text
(它似乎也指定了默认字体)指定了一个值。没有它,
让font=view.font崩溃,出现“意外发现零”。(在Xcode版本7.0.1(7A1001)上测试,包括游乐场和编译项目)因此字体字段是延迟加载的。可能是启动速度优化。谢谢
let font = view.font!
print(font.description)
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"; ...