2016-06-07 3 views
0

Я новичок на этом сайте, поэтому, пожалуйста, со мной. Я пытаюсь построить простой калькулятор в Swift, но я не могу понять, как и почему я получаю сообщение об ошибке («Значение типа String не имеет типа члена Int») или как его исправить. Это мой код до сих пор:Ошибка Swift: Значение типа String не имеет члена Int

class ViewController: UIViewController { 
    var isTypingNumber = false 
    var firstNumber = Int!() 
    var secondNumber = Int!() 
    var operation = "" 

@IBOutlet weak var calculatorDisplay: UILabel! 


@IBAction func acButtonTapped(sender: AnyObject) { 

} 
@IBAction func number7Tapped(sender: AnyObject) { 
    let number7 = sender.currentTitle 
    if isTypingNumber{ 
     calculatorDisplay.text = calculatorDisplay.text! + number7!! 
    }else{ 
     calculatorDisplay.text = number7 
     isTypingNumber = true 
    } 
} 
@IBAction func divideTapped(sender: AnyObject) { 
    isTypingNumber = false 

    firstNumber = calculatorDisplay.text?.Int()! **//Error: Value of type 'String' has no member 'Int'** 
    operation = sender.currentTitle!! 
} 

@IBAction func equalsTapped(sender: AnyObject) { 
    isTypingNumber = false 
    var result = 0 
    secondNumber = calculatorDisplay.text?.Int()! **//Error: Value of type 'String' has no member 'Int'** 

    if operation == "+" { 
     result = firstNumber + secondNumber 
    } else if operation == "-" { 
     result = firstNumber - secondNumber 
    }else if operation == "X" { 
     result = firstNumber * secondNumber 
    }else if operation == "÷"{ 
     result = firstNumber/secondNumber 
} 
    calculatorDisplay.text = "\(result)" 
} 



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

    firstNumber = 0 
    secondNumber = 0 
} 

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

}

Где я ошибся?

+2

Не злоупотребляйте оператор силы UnWrap (''!), Как это. – Alexander

ответ

3

Вместо:

firstNumber = calculatorDisplay.text?.Int()! 

Вы хотите что-то вроде:

if let text = calculatorDisplay.text? { 
    firstNumber = Int(text)! 
} 

Или, если вы хотите жить на краю:

firstNumber = Int(calculatorDisplay.text!)! 
+3

Поскольку вы изучаете Swift, я бы посоветовал вам написать весь свой код, не используя '!' Вообще (узнайте о 'if let',' guard let' и необязательной цепочке вместо этого). –

+0

Или 'calculatorDisplay.text.flatMap {Int ($ 0)}', если вы хотите получить swanky – Hamish

+0

@ originaluser2 ... не дают им идеи ...: p – Alexander

1

Там нет Int() метод в String type.

преобразовать Int в String, попробуйте следующее:

guard let text = calculatorDisplay.text else { 
    //the CalculatorDisplay has no text, deal with it accordingly 
} 
guard let firstNumber = Int(text) else { 
    //the CalculatorDisplay has text, but it's not a valid Int 
} 

//use firstNumber 
Смежные вопросы