我收到错误“类型 '(UITextRange) -> String?'不能符合'BinaryInteger';只有结构/枚举/类类型可以符合协议”

时间:2021-01-17 09:30:53

标签: ios swift

我是 Swift 编程的新手,我做了一个简单的项目,该项目将为标签提供输出,但出现错误:

<块引用>

输入'(UITextRange) -> 字符串?'不能符合“BinaryInteger”;只有 struct/enum/class 类型才能符合协议。

谁能解释一下发生了什么?

@IBOutlet weak var lblOutput: UILabel!
@IBOutlet weak var InputAge: UITextField!

@IBOutlet weak var outputAge: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

@IBAction func calcOutput(_ sender: Any) {
    var age = Int(InputAge.text) * 8;
    lblOutput.text = age;
}

包含错误的图片:

Error

2 个答案:

答案 0 :(得分:1)

存在三个错误:

  1. 您必须解开 textinputAge,这可能是强制的,因为 UITextField 的文本属性永远不会是 nil
  2. 例如,“ABC”不能转换为 Int,因此 Int(...) 返回一个可选项,您必须检查它是否为 nil
  3. textUILabel 属性的类型是 String。您必须将乘法的结果转换回 String

并请以小写字母开头命名函数和变量,并将不可变的变量声明为常量(let)

    @IBOutlet weak var inputAge : UITextField!
    
    @IBAction func calcOutput(_ sender: Any) {
        let stringAge = inputAge.text! 
        if let age = Int(stringAge) {
            lblOutput.text = String(age * 8)
        } else {
            lblOutput.text = "The input string is not convertible to Int"
        }
    }

答案 1 :(得分:0)

在使用前解开可选的文本:

@IBAction func calcOutput(_ sender: Any) {
    if let text = validatedField.text,
       let age = Int(text) {
        lblOutput.text = "\(age * 8)"
    }
}

不要在行尾使用分号

如果您以后不更新其值,请使用 let

将文本设置为文本字段(不是 Int)。