![](/img/trans.png)
[英]Value of protocol type 'Any' cannot conform to 'Equatable'; only struct/enum/class types can conform to protocols
[英]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;
}
包含错误的图像:
有以下三个错误:
inputAge
的text
,这可以强制执行,因为UITextField
的 text 属性永远不会nil
Int
,因此Int(...)
返回一个可选值,您必须检查它是否为nil
UILabel
的text
属性的类型是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.