简体   繁体   English

在Int或Double中转换UITextField

[英]Convert UITextField in Int or Double

I am having issue with this code, learning swift and I cannot understand why. 我对此代码有疑问,学得很快,我不明白为什么。

What I want to do is user enter on two TextField two numbers, click a Button, and then get the result on Label. 我想要做的是用户在两个TextField上输入两个数字,单击一个Button,然后在Label上获取结果。

I know TextField don't allow Int, but only string and I know there is method to convert string to Int, but it is not working for me. 我知道TextField不允许使用Int,但只允许使用string,而且我知道有一种将string转换为Int的方法,但它对我不起作用。

Here is the code: 这是代码:

import UIKit

class ViewController: UIViewController {


    @IBOutlet weak var firstNumber: UITextField!
    @IBOutlet weak var secondNumber: UITextField!
    @IBOutlet weak var resultButton: UIButton!
    @IBOutlet weak var resultNumber: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    var firstNumberConv :Int? = Int(firstNumber.text)
    var secondNumberConv :Int? = Int(secondNumber.text)
    var result = firstNumberConv + secondNumberConv

    @IBAction func resultFunction(_ sender: AnyObject) {
        resultNumber.text = result

    }

}

why don´t put your code inside of your action 为什么不将代码放入动作中

something like this 像这样的东西

@IBAction func resultFunction(_ sender: AnyObject) {
    let firstNumberConv :Int? = Int(firstNumber.text!)
    let secondNumberConv :Int? = Int(secondNumber.text!)
    guard firstNumberConv != nil && secondNumberConv != nil else {
       return
    }
    let result = firstNumberConv! + secondNumberConv!
    resultNumber.text = String(result)

}

I hope this helps you 我希望这可以帮助你

Try the below code: 试试下面的代码:

class ViewController: UIViewController {


    @IBOutlet weak var firstNumber: UITextField!
    @IBOutlet weak var secondNumber: UITextField!
    @IBOutlet weak var resultButton: UIButton!
    @IBOutlet weak var resultNumber: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func resultFunction(_ sender: AnyObject) {

        let firstNumberConv :Int? = Int(firstNumber.text!)
        let secondNumberConv :Int? = Int(secondNumber.text!)
        let result = firstNumberConv! + secondNumberConv!

        resultNumber.text =  String(result)

    }

}

First of all you must put the code into a function. 首先,您必须将代码放入函数中。

Second of all, be consistent! 其次,要保持一致!

Either you're using the numeric keyboard then go and unwrap the optionals: 您正在使用数字键盘,然后去拆开可选部件:

@IBAction func resultFunction(_ sender: AnyObject) {
   let firstNumberConv = Int(firstNumber.text)!
   let secondNumberConv = Int(secondNumber.text)!
   resultNumber.text = "\(firstNumberConv + secondNumberConv)"
}

or you're using the standard keyboard then use optional bindings to check if the user types a non-numeric character: 或者您使用的是标准键盘,然后使用可选的绑定来检查用户是否键入了非数字字符:

@IBAction func resultFunction(_ sender: AnyObject) {
   if let firstNumberConv = Int(firstNumber.text), 
      let secondNumberConv = Int(secondNumber.text) {
        resultNumber.text = "\(firstNumberConv + secondNumberConv)"
   }
}

Simple misunderstanding in variable usage. 对变量用法的简单误解。 The variable "result" is estimated when the ViewController object initiated, not when "resultFunction" is called. 变量“ result”是在ViewController对象启动时估算的,而不是在调用“ resultFunction”时估算的。

So you could correct this as follows 因此,您可以按以下方式更正此问题

@IBAction func resultFunction(_ sender: AnyObject) {
    let firstNumberConv = Int(firstNumber.text) ?? 0
    let secondNumberConv = Int(secondNumber.text) ?? 0
    let result = firstNumberConv + secondNumberConv
    resultNumber.text = "\(result)"
}

And you should remove all variable definition parts. 并且您应该删除所有变量定义部分。 I mean this part 我的意思是这部分

var firstNumberConv :Int? = Int(firstNumber.text)
var secondNumberConv :Int? = Int(secondNumber.text)
var result = firstNumberConv + secondNumberConv

Hope it could work for you. 希望它能为您服务。 Thanks 谢谢

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var firstNumber: UITextField!
@IBOutlet weak var secondNumber: UITextField!
@IBOutlet weak var resultButton: UIButton!
@IBOutlet weak var resultNumber: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
  }

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }

var firstNumberConv :Int? = Int(firstNumber.text)
var secondNumberConv :Int? = Int(secondNumber.text)
var result = firstNumberConv + secondNumberConv

@IBAction func resultFunction(_ sender: AnyObject) {
    resultNumber.text = result

    }

  }

Put your code in viewDidLoad() method or Do this below it will be way better 将您的代码放入viewDidLoad()方法或在下面执行此操作会更好

  func updateNumber(){

  let firstNumberConv = Int(firstNumber.text!)
  let secondNumberConv = Int(secondNumber.text!)
  let result = firstNumberConv! + secondNumberConv!
  resultNumber.text = String(result!)

  }

then call your method 然后调用你的方法

@IBAction func resultFunction(_ sender: AnyObject) {
    updateNumber();
}

Alternatively if you want to convert to Double just change 或者,如果您想转换为Double,只需更改

      Int(firstNumber.text!) to Double(firstNumber.text!)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM