iOS / Swift:无法为UILabel文本属性分配可选字符串

时间:2015-02-19 14:16:28

标签: ios xcode swift uilabel optional

UILabel有一个text属性,它是一个可选的String,但它似乎表现得像一个隐式解包的可选项。为什么我不能为它分配另一个可选字符串?感谢。

@IBOutlet weak var tweetContent: UILabel!

...

var unopt: String = "foo"
var opt: String? = "bar"
var opt2: String?
opt2 = opt                       //Works fine
cell.tweetContent.text? = unopt  //Works fine
cell.tweetContent.text? = opt    //Compile error: Value of optional type 'String?' not unwrapped

1 个答案:

答案 0 :(得分:5)

您无需解开text

text留作String?(又名Optional<String>

cell.tweetContent.text = unopt // Works: String implicitly wraps to Optional<String>
cell.tweetContent.text = opt   // Works: Optional<String>

解缠textString?转换为String

cell.tweetContent.text? = unopt // Works: String
cell.tweetContent.text? = opt   // Fails: Optional<String> cannot become String

<强>更新

也许这里需要更多的解释。 text?比我原先想象的要差,不应该使用。

text = valuetext? = value视为功能setText

text =具有签名func setText(value: String?)。请注意,String?Optional<String>。此外,无论text的当前值是什么,它总是被调用。

text? =具有签名func setText(value: String)。这是捕获,它仅在text具有值时被调用。

cell.tweetContent.text = nil
cell.tweetContent.text? = "This value is not set"
assert(cell.tweetContent == nil)