无法转换’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
您的应用可能会崩溃,但不会通过上述方式。
冲突是……在函数参数列表中, reward
是Int64
类型,但你的参数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 let
或guard 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) }