当前位置:  开发笔记 > IOS > 正文

"无法使用'UITextField'类型的参数列表调用类型'Int'的初始值设定项"是什么意思?

如何解决《"无法使用'UITextField'类型的参数列表调用类型'Int'的初始值设定项"是什么意思?》经验,为你挑选了1个好方法。



1> Jojodmo..:

错误正是它所说的:初始化Int时,不能使用UITextField作为参数

这是您在textFieldsDidEndEditing函数中使用的代码

lrs24 = (30 * Int(weight)! + 70) * Int(factor)!
                 ^ ^ ^ ^              ^ ^ ^ ^
                 | | | |              | | | |
         Defined as a UITextField!    | | | |
                               Defined as a [UITextField]!

你试图告诉Swift创建一个新的整数,Int().要创建整数,你给Swift一个文本字段,weightfactor.Swift应该从哪里得到整数值?A UITextField不是整数.

把它放到透视中,就像试图将苹果变成橙色一样 - 这是不可能的(除非你有黑魔法,但这是一个不同的主题).同样的想法也适用于此 - 您无法转换用户可以将文本输入数字的字段.它只是不起作用!

但是,您可以将字符串转换为整数,因为它包含可以初始化整数的数据.例如,将字符串"7901"转换为数字非常简单,Int("7901")因为您提供的Swift数据可以转换为整数.

如果要获取在文本字段中输入的文本,则必须使用该UITextField.text变量.例如,要获取在weight字段中输入的数字,您可以使用

//This should only be used if you are 100% sure that the text will be a number
//If it isn't, using this code, the app will crash
var weightInteger: Int = Int(weight.text)!

//If you aren't 100% sure the input will be a number, you should use
var weightInteger: Int = Int(weight.text) ?? 0

你可以这样做,因为上面Int用a初始化了String

我还假设factor变量不应该是a [UITextField]!,它是一个数组(或列表)UITextFields.相反,它应该是一个UITextField!(当然,我可能是错的,你可能实际上存储了UITextFields该变量的列表,在这种情况下,你必须使用for循环来获取列表中的值.

如果要设置标签的文本,则必须使用UILabel.text- 不能只设置UILabel为字符串.

所以,最后,假设factor应该是a UITextField!而不是a [UITextField]!,你应该使用

let value: Int = (30 * (Int(weight.text) ?? 0) + 70) * (Int(factor.text) ?? 0)
//You may want to change the last bit
//(Int(factor.text) ?? 0) to (Int(factor.text) ?? 1)
//Which would set the factor to "1" instead of "0"
//if a non-integer or nothing is inputed

lrs24.text = "\(value)"
//this sets the text of the label to
//the value above. It has to be in the format
//"\(x)" because we have to turn x into a String.
//If you prefer, you could also use String(x)
//which would be String(value) in this example
//that's personal preference, though

此外,虽然这与原始问题无关,但您应该对代码执行一些更好的操作

你不需要;在行尾 - Swift自动为你结束行

你应该避免强迫展开(该!操作),除非你真的确定价值不会为零.而不是使用的Int(x)!,你应该使用Int(x) ?? 0,这将,而不是崩溃给的"0",如果初始化整数的值nil.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有