【问题标题】:Trying to add multiple Uitextfields as integers [duplicate]尝试将多个 Uitextfields 添加为整数 [重复]
【发布时间】:2019-01-31 18:39:41
【问题描述】:

我无法将我的 Uitextfields 转换为整数。我正在尝试将它们相加以获得第 2 洞和第 3 洞的总分?大家有什么想法吗?我尝试过 Int(hole.text) 和许多其他变体,但我不断收到错误。

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

【问题讨论】:

  • 展示你的实际尝试。然后搜索您遇到的错误。
  • 与您的问题无关,但 UserDefaults 有一个名为 string(forKey:) 的方法,专门用于检索字符串值。

标签: ios swift uitextfield userdefaults


【解决方案1】:

您可以选择多种解决方案。但是在将文本字段的文本转换为 Int 之前,您应该进行一些检查和处理 例如,文本是空的吗?文本格式是否有效?

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

【讨论】:

  • 您可能不想将无效号码视为0。这就是可选项的全部意义所在。
  • 你是对的。但这取决于要求。我的例子只是展示了你可以如何做的基本方法。它并不完美。如果你想捕捉无效数字,你可以让实用函数 throwable。
【解决方案2】:
    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
    }()

【讨论】:

    猜你喜欢
    • 2014-04-21
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    相关资源
    最近更新 更多