繁体   English   中英

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

[英]I got error “Type '(UITextRange) -> String?' cannot conform to 'BinaryInteger'; only struct/enum/class types can conform to protocol”

我是 Swift 编程的新手,我做了一个简单的项目,它将 output 提供给 label,但我得到了错误:

键入“(UITextRange)-> 字符串?” 不能符合“BinaryInteger”; 只有结构/枚举/类类型可以符合协议。

谁能解释发生了什么?

@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;
}

包含错误的图像:

错误

有以下三个错误:

  1. 您必须解开inputAgetext ,这可以强制执行,因为UITextField的 text 属性永远不会nil
  2. 例如 "ABC" 不能转换为Int ,因此Int(...)返回一个可选值,您必须检查它是否为nil
  3. UILabeltext属性的类型是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"
        }
    }

使用前解开可选的文本:

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

不要在行尾使用分号

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM