如何检查UILabel是否为空并将内容附加到标签?

Lon*_*ang 4 null ios swift

ios和swift的新手.想要一些最佳实践技巧.我想将内容添加到新行中的标签中.我的尝试:

@IBOutlet weak var history: UILabel!
@IBAction func appendContent() {
    if history.text != nil  && !history.text!.isEmpty  {
        history.text = history.text!  + "\r\n" + "some content"
    }
    else{
        history.text = digit
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,它似乎工作,

  1. 有没有更好的方法来检查文本是不是零而不是空?
  2. "\ r \n"是否有"关键字"的东西?

Een*_*dje 7

您可以使用可选绑定:if let检查是否有内容nil.

例1:

if let text = history.text where !text.isEmpty {
    history.text! += "\ncontent"
} else {
    history.text = digit
}
Run Code Online (Sandbox Code Playgroud)

或者您可以map用来检查选项:

例2:

history.text = history.text.map { !$0.isEmpty ? $0 + "\ncontent" : digit } ?? digit
Run Code Online (Sandbox Code Playgroud)

!$0.isEmpty 在大多数情况下甚至不需要,所以代码可以看起来更好一点:

history.text = history.text.map { $0 + "\ncontent" } ?? digit
Run Code Online (Sandbox Code Playgroud)

编辑:map什么:

map方法解决了使用函数转换数组元素的问题.

假设我们有一个代表一些金额的Ints数组,我们想要创建一个新的字符串数组,其中包含货币值后跟"€"字符,即[10,20,45,32] -> ["10€","20€","45€","32€"].

这样做的丑陋方法是创建一个新的空数组,迭代我们的原始数组,转换每个元素并将其添加到新数组

var stringsArray = [String]()

for money in moneyArray {
    stringsArray += "\(money)€"
}
Run Code Online (Sandbox Code Playgroud)

使用map只是:

let stringsArray = moneyArray.map { "\($0)€" }
Run Code Online (Sandbox Code Playgroud)

它也可以用于选项:

现有映射允许您将函数应用于可选内部的值,如果该可选项不是nil.例如,假设您有一个可选的整数i,并且您希望将其加倍.你可以写i.map {$ 0*2}.如果我有一个值,你会得到一个双倍的可选值.另一方面,如果我是零,则不会发生加倍.

(来源)

做了??什么:

如果a包含值,则nil合并运算符(a ?? b)展开可选a;如果a为n,则返回默认值b.表达式a始终是可选类型.表达式b必须与存储在a中的类型匹配.

nil合并运算符是以下代码的简写:

a != nil ? a! : b
Run Code Online (Sandbox Code Playgroud)