-2

I am having trouble turning my Uitextfields into integers. I am trying to add them to get a total score for hole 2 and hole 3? Do you all have any ideas? I have tried Int(hole.text) and many other variations, but i keep getting errors.

//
//  ViewController.swift
//  Savetext5
//
//  Created by Brendan Berkowitz on 1/31/19.
//  Copyright © 2019 Brendan Berkowitz. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    //hole one
    @IBOutlet weak var playername: UITextField!

    @IBAction func saveButton(_ sender: Any) {
        UserDefaults.standard.set(playername.text, forKey: "playonename")}
    @IBAction func deleteButton(_ sender: Any) {
        UserDefaults.standard.removeObject(forKey: "playonename")}

    // hole 2
    @IBOutlet weak var holetwo: UITextField!

    @IBAction func saveButton2(_ sender: Any) {
        UserDefaults.standard.set(holetwo.text, forKey: "holetwo")}
    @IBAction func deleteButton2(_ sender: Any) {
        UserDefaults.standard.removeObject(forKey: "holetwo")}

    // hole 3

    @IBOutlet weak var holethree: UITextField!
    @IBAction func savebutton3(_ sender: Any) {UserDefaults.standard.set(holethree.text, forKey: "holethree")}
    @IBAction func deletebutton3(_ sender: Any) {UserDefaults.standard.removeObject(forKey: "holethree")}


    override func viewDidLoad() {
        super.viewDidLoad()

        //hole one
        let savedName = UserDefaults.standard.object(forKey: "playonename")
        if let playeronename = savedName as?  String {
            playername.text = playeronename 
        }

        // Hole two
        let savedholetwoname = UserDefaults.standard.object(forKey: "holetwo")
        if let holetwoname = savedholetwoname as? String { 
            holetwo.text = holetwoname
        }

        // hole three
        let savedholethreename = UserDefaults.standard.object(forKey: "holethree")
        if let holethreename = savedholethreename as? String {
            holethree.text = holethreename
        }   
    }
}
Leo Dabus
  • 229,809
  • 59
  • 489
  • 571

2 Answers2

0

There are many solutions you can choose. But before you are going to convert the textfield's text to Int, you should do some checking and handling e.g Is text empty? Is the text's format valid?

// define utility function

extension UITextField {
  var textToInt: Int {
     // return 0 as default value
     return Int(text ?? "0") ?? 0
  }
}

class ViewController: UIViewController {
   func totalScore() -> Int {
      return holetwo.textToInt + holethreename.textToInt
   }
}
AIex H.
  • 21
  • 3
  • 1
    You probably don't want to treat an invalid number as `0`. That's the whole point of optionals. – rmaddy Jan 31 '19 at 19:46
  • You are right. But It depends on the requirements. My example just showing the basic way how you can do. It is not perfect. If you want to catch invalid numbers, you can make the utility function throwable. – AIex H. Feb 01 '19 at 03:55
-1
    let textFieldOne = UITextField()
    let textFieldTwo = UITextField()

    let sum: Int = {

        if let scoreOne = Int(textFieldOne.text ?? "0"), let scoreTwo = Int(textFieldTwo.text ?? "0") {
            return scoreOne + scoreTwo
        }

        return 0
    }()
BearBearBear
  • 109
  • 3
  • 9