Modo consola
Introduce una palabra: coche Traducción: car Introduce una palabra: car Traducción: coche Introduce una palabra: casa Traducción: house Introduce una palabra: dog Traducción: perro Introduce una palabra: aaaa Traducción: palabra no encontrada Introduce una palabra: ...
var palabras = [("coche", "car"), ("gato", "cat"), ("perro", "dog"), ("casa", "house")] func traduce(_ entrada:String) -> String { for palabra in palabras { if palabra.0 == entrada { return palabra.1 } else if palabra.1 == entrada { return palabra.0 } } return "palabra no encontrada" } repeat { print("Introduce una palabra: ", terminator:"") let entrada = readLine()! let salida = traduce(entrada) print("Traducción: \(salida)\n") } while true
Aplicación iOS
Traducir con el evento de cambio de texto
// // ViewController.swift // Traductor // import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } var palabras = [("coche", "car"), ("gato", "cat"), ("perro", "dog"), ("casa", "house")] @IBOutlet var traduccion: UILabel! func traduce(_ entrada:String) -> String { for palabra in palabras { if palabra.0 == entrada { return palabra.1 } else if palabra.1 == entrada { return palabra.0 } } return "palabra no encontrada" } @IBAction func traduce(_ entrada: UITextField) { traduccion.text = traduce(entrada.text!) } }
Traducir al pulsar un botón
// // ViewController.swift // Traductor // import UIKit class ViewController: UIViewController { @IBOutlet var entrada: UITextField! @IBOutlet var salida: UILabel! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } var palabras = [("coche", "car"), ("gato", "cat"), ("perro", "dog"), ("casa", "house")] func traduce(_ entrada:String) -> String { for palabra in palabras { if palabra.0 == entrada { return palabra.1 } else if palabra.1 == entrada { return palabra.0 } } return "palabra no encontrada" } @IBAction func boton(_ sender: UIButton) { salida.text = traduce(entrada.text!) } }
Utilizando una clase y una estructura para añadir nuevas palabras y guardar el diccionario
Instalación de La librería «Disk»
Vamos a proceder a instalar la librería «Disk» utilizando el gestor de librerías «CocoaPods«:
- Crear un proyecto de Xcode del tipo «TabbedApp»
- Abre un terminal y ves al directorio del proyecto utilizando el comando
$ cd
. - Crear el fichero
Podfile
utilizando el comando$ pod init
. - Abre el fichero «Podfile». La primera línea debe indicar la plataforma y la versión de iOS:
platform :ios, '12.2'
. - Añade la línea
pod 'Disk'
dentro de la seccióntarget
. - Guarda el fichero.
- Instala la librería con la instrucción
$ pod install
. - Abre el fichero
.xcworkspace
que se ha creado. A partir de ahora deberemos abrir ese fichero en vez del.xcodeproj
.
El contenido final del archivo «Podfile» sería el siguiente:
platform :ios, '12.2' target 'traductor' do use_frameworks! # Pods for Traductor pod 'Disk' end
Diccionario.swift
// // Diccionario.swift // Traductor // import Disk struct Palabra : Codable { let es : String let en : String } class Diccionario { var palabras : [Palabra] = [] func add(_ palabra:Palabra) { self.palabras += [palabra] } func traduce(_ entrada:String) -> String { for palabra in self.palabras { if palabra.es == entrada { return palabra.en } else if palabra.en == entrada { return palabra.es } } return "palabra no encontrada" } func guarda() { do { try Disk.save(self.palabras, to: .applicationSupport, as: "diccionario.json") } catch { print("Error guardando") } } func lee() { do { try self.palabras = Disk.retrieve("diccionario.json", from: .applicationSupport, as: [Palabra].self) } catch { print("Error leyendo") } } }
AppDelegate.swift
// // AppDelegate.swift // Traductor // import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var diccionario = Diccionario() var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { self.diccionario.lee() return true } func applicationWillResignActive(_ application: UIApplication) { } func applicationDidEnterBackground(_ application: UIApplication) { } func applicationWillEnterForeground(_ application: UIApplication) { } func applicationDidBecomeActive(_ application: UIApplication) { } func applicationWillTerminate(_ application: UIApplication) { } }
FirstViewController.swift
// // FirstViewController.swift // Traductor // import UIKit class FirstViewController: UIViewController { var diccionario : Diccionario! = nil @IBOutlet var traduccion: UILabel! @IBOutlet var entrada: UITextField! override func viewDidLoad() { super.viewDidLoad() let appDelegate = UIApplication.shared.delegate as! AppDelegate self.diccionario = appDelegate.diccionario print(self.diccionario.traduce("dog")) } @IBAction func traducir(_ sender: UITextField) { traduccion.text! = self.diccionario.traduce(sender.text!) } }
SecondViewController.swift
// // SecondViewController.swift // Traductor // import UIKit class SecondViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet var palabras: UITableView! var diccionario : Diccionario! = nil override func viewDidLoad() { super.viewDidLoad() self.palabras.dataSource = self self.palabras.delegate = self let appDelegate = UIApplication.shared.delegate as! AppDelegate self.diccionario = appDelegate.diccionario } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return diccionario.palabras.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: "cell") cell.textLabel?.text = diccionario.palabras[indexPath.row].es + ", " + diccionario.palabras[indexPath.row].en return cell } @IBAction func addPalabra(_ sender: UIButton) { let alert = UIAlertController(title: "Añadir palabra", message: "", preferredStyle: .alert) alert.addTextField { (UITextField) in UITextField.placeholder = "Palabra en español" } alert.addTextField { (UITextField) in UITextField.placeholder = "Palabra en inglés" } alert.addAction(UIAlertAction(title: "Añadir", style: .default, handler: { (UIAlertAction) in let es = alert.textFields![0] as UITextField let en = alert.textFields![1] as UITextField self.diccionario.add(Palabra(es:es.text!, en:en.text!)) self.diccionario.guarda() self.palabras.reloadData() })) alert.addAction(UIAlertAction(title: "Cancelar", style: .destructive, handler: nil)) self.present(alert, animated: true, completion: nil) } }
Cómo borrar palabras del diccionario
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == UITableViewCell.EditingStyle.delete { self.diccionario.palabras.remove(at: indexPath.row) self.diccionario.guarda() self.palabras.reloadData() } }