iOS/Swift: 无法将可选字符串分配给 UILabel 文本 属性
iOS/Swift: Can't assign optional String to UILabel text property
UILabel 有一个文本 属性,它是一个可选的字符串,但它似乎表现得像一个隐式解包的可选字符串。为什么我不能给它分配另一个可选字符串?谢谢
@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
更新
也许这里需要多解释一下。 text?
比我原先想象的要差,不应该使用。
将 text = value
和 text? = 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)
UILabel 有一个文本 属性,它是一个可选的字符串,但它似乎表现得像一个隐式解包的可选字符串。为什么我不能给它分配另一个可选字符串?谢谢
@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
更新
也许这里需要多解释一下。 text?
比我原先想象的要差,不应该使用。
将 text = value
和 text? = 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)