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
Podfileutilizando 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
.xcworkspaceque 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()
}
}