2016-11-02 4 views
1

Im пытается сделать этот калькулятор для различных математических формул, и я застрял на этом этапе. Я следовал этой tutorialНевозможно преобразовать значение типа 'String?' чтобы ввести «NSString» в принуждение

Вот мой код:

import UIKit 

class pythagorasViewController: UIViewController { 


@IBOutlet weak var aLabel: UILabel! 
@IBOutlet weak var bLabel: UILabel! 
@IBOutlet weak var aField: UITextField! 
@IBOutlet weak var bField: UITextField! 
@IBOutlet weak var answerLabel: UILabel! 
@IBAction func calculateButton(_ sender: UIButton) { 
    var a = (aField.text as NSString).floatValue 
    var b = (bField.text as NSString).floatValue 
    var answer = sqrt(a*a + b*b) 
    answerLabel.text = "\(answer)" 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 

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

} 

часть, где я получаю сообщение об ошибке по адресу:

var a = (aField.text as NSString).floatValue 
var b = (bField.text as NSString).floatValue 
+1

Зачем использовать 'NSString' вообще? У Swift есть 'String'. И гораздо лучше использовать 'NSNumberFormatter', чтобы попытаться преобразовать введенные пользователем числа в фактические числа. – rmaddy

+0

И вам нужно иметь дело с тем, что пользователь вводит недопустимые значения. – rmaddy

+0

Есть так много учебников с таким большим количеством ... – vadian

ответ

1

Предпочитают пусть вар, когда это возможно. Вам не нужно использовать NSString. Вы можете использовать String для Float ?. Вам нужно развернуть свойство text, которое является строкой? (если у вас есть вопрос о типе переменной, нажмите кнопку, и он покажет вам) и Float? преобразование:

func calculateButton(_ sender: UIButton) { 
    guard let aText = aField.text, 
      let bText = bField.text, 
      let a = Float(aText), 
      let b = Float(bText) else { 
     return 
    } 
    let answer = sqrt(a*a + b*b) 
    answerLabel.text = "\(answer)" 
} 
+2

В вашем коде нет кастингов. 'Float (aText)' не является литой, это преобразование. Значимое различие. – rmaddy