Swift 代码错误:类型为 String 的值没有 Int 成员。

4

我正在尝试用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
不要滥用强制解包运算符(!),像这样。 - Alexander
2个回答

7

替换为:

firstNumber = calculatorDisplay.text?.Int()!

你需要的是这样的东西:
if let text = calculatorDisplay.text? {
    firstNumber = Int(text)!
}

或者如果您想要冒险尝试:

firstNumber = Int(calculatorDisplay.text!)!

3
由于您正在学习Swift,我鼓励您在编写代码时完全不使用!(可以学习使用if letguard let和可选链代替)。 - Aaron Brager
1
@originaluser2 或许,在你打开分析器或者关注代码可读性之前,这种情况下可读性会受到相当大的阻碍。 - Alexander
它可能会在边缘情况下引入读者的不确定性,使他们不得不查找文档。flatMap如何处理在nil上调用的情况?如果初始化程序失败,它将如何处理? - Alexander
@AMomchilov 我同意,这也是我指出它不是特别适合初学者的原因(我一开始只是为了展示在Swift中处理可选项有多少安全方式)。尽管如此,你可以在flatMap上使用alt-click,Xcode会告诉你在这种情况下它确切的作用 - 对于if let则不能这样说。 - Hamish
1
@originaluser2,如果像if let这样的语言特性有内联文档,那就太棒了。 - Alexander
显示剩余4条评论

4

String类型中没有Int()方法。

要将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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接