我一直在使用可选项。我已将字符串变量声明为可选
var str: String?
现在我在这个变量中设置了一些值str = "hello"
。现在,如果我打印此选项而不打开,则打印为
可选("你好&#34)
但是如果我将标签上的文字设置为self.label.text = str
,那么它只显示值为
您好
请解释为何不在标签上显示文字
可选("你好&#34)
答案 0 :(得分:6)
text
的{{1}}属性是可选的。 UILabel
非常智能,可以检查UILabel
属性的值是设置为text
还是非零值。如果它不是nil
,那么它会显示正确展开的(现在是非可选的)值。
在内部,我认为nil
的{{1}}方法的代码如下:
drawRect
答案 1 :(得分:0)
我知道我已经看到在UILabel,UITextView,UITextField中打印了可选内容。 Rmaddy的答案令人信服。
很有可能存在内部if let else
,因此,如果可选参数具有值,则它将解开包装并显示。如果没有,它将什么也没有显示。
但是有一个陷阱!
let optionalString : String? = "Hello World"
label.text = "\(optionalString)" // Optional("Hello World")
label.text = optionalString // Hello World
let nilOptionalString : String?
label.text = "\(nilOptionalString)" // `nil` would be shown on the screen.
label.text = nilOptionalString // no text or anything would be shown on the screen . It would be an empty label.
原因是,一旦执行"\(optionalVariable)"
,它就会进行字符串插值,一旦它是String
而不是String?
,则将显示插值结果! / p>