2016-10-11 2 views
1

У меня проблема с этим кодом, быстро изучается, и я не могу понять, почему.Преобразование UITextField в Int или Double

Что я хочу сделать, так это ввести два символа двух текстовых полей, нажать кнопку, а затем получить результат на ярлыке.

Я знаю, что TextField не допускает Int, но только строку, и я знаю, что есть метод преобразования строки в Int, но он не работает для меня.

Вот код:

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 

    } 

} 
+1

http://stackoverflow.com/a/34294660/2303865 –

+0

http://stackoverflow.com/a/29783546/2303865 –

ответ

2

почему don't поместить свой код внутри вашего действия

что-то вроде этого

@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) 

} 

Я надеюсь, что это помогает вам

+0

Я писал решение моей, когда я увидел вашу help.Thank вас очень много. –

+0

Я не могу понять, почему мне нужно преобразовать String в Int внутри действия, можете ли вы объяснить, пожалуйста? –

+0

Добро пожаловать! –

2

Попробуйте использовать код ниже:

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) 

    } 

} 
+0

Большое спасибо за помощь, я пришел к решению самостоятельно через несколько минут после дня! Но сейчас я решил это практически, но я не могу понять, почему именно преобразование внутри действия вместо внешнего. Не могли бы вы рассказать мне? –

+0

Хранение его вне любой функции будет работать как член экземпляра класса, так что firstNumberConv не может инициализироваться с помощью firstNumber, так как firstNumber сам по себе недоступен в этот момент. –

0

Простое недоразумение при использовании переменных данных. Переменная «результат» оценивается при запуске объекта ViewController, а не при вызове функции «resultFunction».

Так что вы можете исправить это следующим образом

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

И вы должны удалить все части определения переменной. Я имею в виду эту часть

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

Надеюсь, это сработает для вас. Thanks

+0

Большое спасибо. –

1

Прежде всего, вы должны ввести код в функцию.

Прежде всего, будьте последовательны!

Либо вы с помощью цифровой клавиатуры и затем развернуть: УСТРОЙСТВА

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

или вы с помощью стандартной клавиатуры, то используйте дополнительные привязки, чтобы проверить, если пользователь печатает нечисловой символ:

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

Большое спасибо, вы предлагаете оценить. –