¿Cómo comprobar si un UILabel está vacío y agregar contenido a una label?

Nuevo en ios y rápido. ¿Quieres algunos consejos de mejores prácticas? Quiero agregar contenido a una label en una nueva línea. Mi bash

@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 } } 

Parece que funciona, sin embargo,

  1. ¿Hay alguna forma mejor de verificar que el text no sea nulo y no esté vacío?
  2. ¿Hay algo "palabra key" para "\ r \ n"?

Puede usar la encuadernación opcional: if let verificar si algo es nil .

Ejemplo 1:

 if let text = history.text where !text.isEmpty { history.text! += "\ncontent" } else { history.text = digit } 

O puede usar el map para verificar las opciones:

Ejemplo 2:

 history.text = history.text.map { !$0.isEmpty ? $0 + "\ncontent" : digit } ?? digit 

!$0.isEmpty en la mayoría de los casos ni siquiera es necesario, por lo que el código puede verse un poco mejor:

 history.text = history.text.map { $0 + "\ncontent" } ?? digit 

EDITAR: Qué hace el map :

El método del map resuelve el problema de transformar los elementos de una matriz usando una function.

Digamos que tenemos una matriz de Ints que representa algunas sums de dinero y queremos crear una nueva matriz de cadenas que contiene el valor del dinero seguido del carácter "€", es decir [10,20,45,32] -> ["10€","20€","45€","32€"] .

La manera fea de hacerlo es creando una nueva matriz vacía, iterar nuestra matriz original transformando cada elemento y agregarlo a la nueva matriz

 var stringsArray = [String]() for money in moneyArray { stringsArray += "\(money)€" } 

El uso del map es justo:

 let stringsArray = moneyArray.map { "\($0)€" } 

También se puede usar para opcionales:

El map existente le permite aplicar una function al valor dentro de una opción, si esa opción es no-nil. Por ejemplo, suponga que tiene un integer opcional i y desea duplicarlo. Podrías escribir i.map {$ 0 * 2}. Si tengo un valor, obtienes un valor opcional de ese valor duplicado. Por otro lado, si yo soy nulo, no se duplicará.

( fuente )

Que hace ?? hacer:

El operador nil coalescing (a? B) desenvuelve un opcional a si contiene un valor, o devuelve un valor pnetworkingeterminado b si a es nil. La expresión a siempre es de un tipo opcional. La expresión b debe coincidir con el tipo que se almacena dentro de a.

El operador nulo de coalescencia es una abreviatura del código siguiente:

 a != nil ? a! : b 

¿Qué pasa con el uso de algo como esto:

 if let text = history.text where !text.isEmpty { history.text = "\(text)\nsome content" }