当前位置 : 主页 > 手机开发 > ios >

ios – “无法使用’UITextField’类型的参数列表调用类型’Int’的初始值设定项

来源:互联网 收集:自由互联 发布时间:2021-06-11
在我的应用程序中,我有一串代码是lrs24 =(30 * Int(weight)!70)* Int(factor)!;.似乎一切正常,但编译器说它“无法使用’UITextField’类型的参数列表调用类型’Int’的初始化器”.这意味着什么
在我的应用程序中,我有一串代码是lrs24 =(30 * Int(weight)!70)* Int(factor)!;.似乎一切正常,但编译器说它“无法使用’UITextField’类型的参数列表调用类型’Int’的初始化器”.这意味着什么,我该如何解决?谢谢!

PS-这是我的所有代码 –

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var animalNum: UITextField!
@IBOutlet weak var logLabel: UILabel!
@IBOutlet weak var resetButton: UIButton!


@IBOutlet weak var weight: UITextField!
@IBOutlet weak var deh: UITextField!
@IBOutlet weak var losses: UITextField!
@IBOutlet var factor: [UITextField]!

@IBOutlet weak var lrs24: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

    // Handle the text field’s user input through delegate callbacks.
    animalNum.delegate = self
}

// MARK: UITextFieldDelegate

func textFieldShouldReturn(textField: UITextField) -> Bool {
    // Hide the keyboard.
    textField.resignFirstResponder()
    return true
}

func textFieldDidEndEditing(textField: UITextField) {
    logLabel.text = textField.text
}

// MARK: Actions
@IBAction func setDefaultLabelText(sender: UIButton) {
    logLabel.text = "Default Text"
}


@IBAction func textFieldsDidEndEditing(sender: AnyObject) {
    lrs24 = (30 * Int(weight)! + 70) * Int(factor)!;
    //+ Int(weight)! * Int(deh)! * 10 + Int(losses)!



    //(30 * &weight + 70) * &factor + &weight * &deh * 10 + &losses
}

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

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

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

你试图告诉Swift创建一个新的整数Int().要创建整数,您需要为Swift提供文本字段,权重和因子. Swift应该从哪里得到整数值? UITextField不是整数.

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

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

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

//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初始化与String

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

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

所以,最后,假设该因素应该是一个UITextField!而不是[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,如果初始化的整数为nil,它将代替崩溃给出值“0”.

网友评论