iOS / Swift:无法将可选string分配给UILabel文本属性
UILabel有一个文本属性,它是一个可选的string,但它似乎像一个隐式解包可选。 为什么我不能分配另一个可选的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
你不需要打开text
。
留下text
为String?
(又名Optional<String>
)
cell.tweetContent.text = unopt // Works: String implicitly wraps to Optional<String> cell.tweetContent.text = opt // Works: Optional<String>
如何解包text
String?
成一个String
。
cell.tweetContent.text? = unopt // Works: String cell.tweetContent.text? = opt // Fails: Optional<String> cannot become String
UPDATE
也许这里需要多一点解释。 text?
比我原先认为的还差,不应该使用。
想想text = value
和text? = value
text? = value
作为函数setText
。
text =
具有签名func setText(value: String?)
。 记住, String?
是Optional<String>
。 另外,它总是被称为不pipetext
的当前值。
text? =
text? =
具有签名func setText(value: String)
。 这里是catch,只有当text
有一个值时才被调用。
cell.tweetContent.text = nil cell.tweetContent.text? = "This value is not set" assert(cell.tweetContent == nil)