无法转换’String’类型的值? 预期参数类型’Int64’swift ios

是什么导致了ff中的误差。 行以及如何解决它的问题:(rewardField?.text)是说不能转换’String’类型的值? 预期参数类型’Int64’swift ios。 顺便说一句,代码db中的实体奖励类型是int64。

谢谢

self.saveDataInCoreData(nameOfGroccery: (textField?.text)! , detail: (detailField?.text)! , reward: (rewardField?.text)) func saveDataInCoreData(nameOfGroccery:String , detail: String , reward: Int64){ let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext let groceryData = GroceryItem(context: context) // Link GroceryItem & Context groceryData.name = nameOfGroccery groceryData.detail = detail groceryData.reward = reward groceryData.isSelected = false groceryData.houseNo = loggedInUserHouseNumber // print("data:", groceryItem.name) (UIApplication.shared.delegate as! AppDelegate).saveContext() } 

 //if rewardField has some text and if it can be converted to Int64 guard let value = rewardField?.text, let rewardInt = Int64(value) else { /// either no value in rewardField, or value is not Int return } //OK to proceed now, Call your function self.saveDataInCoreData(nameOfGroccery: (textField?.text)! , detail: (detailField?.text)! , reward: rewardInt) 

安全的方法是使用guard检查文本不是nil并且可以转换为数字。

 guard let value = rewardField?.text, let reward = Int64(value) else { /// Not valid return } print(reward) 

如果rewardField?.text = xyz (任何非数字值),它将无效。

编辑评论

始终在从数组中获取元素之前检查数组计数。 从0th索引获取时,您可以first使用它来获取第一个对象。

 if let rewardField = alert?.textFields.first { /// Use this rewardField here print(rewardField.text) } 

如果数组不包含任何textField您的应用可能会崩溃,但不会通过上述方式。

冲突是……在函数参数列表中, rewardInt64类型,但你的参数rewardField?.text是一个String? 类型。

现在,您只需将rewardField?.text转换/转换为64位整数值。

您正在发送需要传递Int值的String。 您正在使用“rewardField?.text”获取字符串

您需要将其转换为Int

您可以键入将您的字符串值更改为Int64

Int(rewardField!.text)!

如果您编译您的64位应用程序,那么Int将是64位本身。

注意:您必须validationtextfiled以仅允许Int Value,否则您可能会因Unwanted值而崩溃。

函数saveDataInCoreData中的最后一个参数的类型为Int64。 请更换:

 self.saveDataInCoreData(nameOfGroccery: (textField?.text)! , detail: (detailField?.text)! , reward: (rewardField?.text)) 

至:

 self.saveDataInCoreData(nameOfGroccery: (textField?.text)! , detail: (detailField?.text)! , reward: Int64((rewardField?.text)!)!) 

但是,不要使用强制解包,当使用字符串值初始化构造函数Int64时,将其移动到if letguard let语句。

例如:

 var grocceryTextField: UITextField? var detailTextField: UITextField? var rewardTextField: UITextField? grocceryTextField = UITextField() grocceryTextField?.text = "a" detailTextField = UITextField() detailTextField?.text = "a" rewardTextField = UITextField() rewardTextField?.text = "213" func saveDataInCoreData(nameOfGroccery: String, detail: String, reward: Int) { // ... print(reward) } if let grocceryName = grocceryTextField?.text, let detail = detailTextField?.text, let reward = rewardTextField?.text, let rewardRepresentation = Int(reward) { saveDataInCoreData(nameOfGroccery: grocceryName, detail: detail, reward: rewardRepresentation) }