我是 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;
}
包含错误的图片:
答案 0 :(得分:1)
存在三个错误:
text
的 inputAge
,这可能是强制的,因为 UITextField
的文本属性永远不会是 nil
Int
,因此 Int(...)
返回一个可选项,您必须检查它是否为 nil
text
的 UILabel
属性的类型是 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)。