将 Int 属性从文本字段传回控制器

Posted

技术标签:

【中文标题】将 Int 属性从文本字段传回控制器【英文标题】:Passing Int property from textfield back to controller 【发布时间】:2017-10-06 17:37:19 【问题描述】:

我正在尝试使用委托将数据从文本字段传递回前一个控制器。当我尝试在此调用中分配 Int 值时,我被卡住了。 这个问题相当容易,但是我找不到简单的解决方案。我一直在尝试使用其他属性的不同方法,这些属性应该保持这个值,但没有成功。我要如何处理这个 budgetAmount.text 才能正确转换?

protocol BudgetDelegate: class 
func enteredBudgetData(info: String, info2: Int)
 

class AddBudgetViewController: UIViewController 

var budget: Budget?
weak var delegate: BudgetDelegate? = nil

@IBOutlet weak var budgetName: UITextField!
@IBOutlet weak var budgetAmount: UITextField!

//
@IBAction func saveContent(_ sender: UIButton) 
    if ((budgetName.text?.isEmpty)! && (budgetAmount.text?.isEmpty)!) 
        navigationController?.pop(animated: true)
     else 
      ->  delegate?.enteredBudgetData(info: budgetName.text!, info2: budgetAmount.text!) 
        navigationController?.pop(animated: true)
        
    

错误无法将“String”类型的值转换为预期的参数类型“Int”

【问题讨论】:

到底是什么问题?您可以发布代表的代码吗? CSjunkie,添加了错误描述。我必须输入文本字段,其中一个是金额字段,我想在其中输入 Int 值。 看看下面 rmaddy 的解决方案,问题是在将字符串传递给函数之前,您没有将字符串转换为 Int。 【参考方案1】:

您的协议方法的info2 参数是Int 类型,但您传递的budgetAmount.text! 当然是String。你需要传递一个Int

也许您需要将文本字段中的文本转换为Int

delegate?.enteredBudgetData(info: budgetName.text!, info2: Int(budgetAmount.text!) ?? 0)

顺便说一句-您正在对! 运算符进行几次糟糕的使用。您应该花时间学习可选选项以及如何安全地使用它们。

【讨论】:

是的,感谢您的快速响应和输入。我失踪了?? 0 你也错过了到Int的转换。 我已经尝试过这种转换,但没有在上面输入这部分。 我将! 运算符称为“crash if nil”运算符。新的 Swift 开发人员应该假装它不存在,直到他们对可选项有了充分的理解。 @DuncanC 遗憾的是,这是 Xcode 的错,因为它建议您在尝试将可选值传递给非可选值时添加 !【参考方案2】:

因此,根据您的问题,您只想传递来自UITextFieldInt 数据。而且根据您的描述,委托没有任何问题。

String 转换为Int 很简单:

例子:

let num = "1"
if let intNum = Int(num) 
    // There you have your Integer.

【讨论】:

以上是关于将 Int 属性从文本字段传回控制器的主要内容,如果未能解决你的问题,请参考以下文章

使用 unwind segue 从文本字段传递数据的问题

如何将 int 值加载到文本字段并显示在另一个集合视图控制器的标签上

Obj-C:从导航控制器中的 detailViewController 传回参数

将数据传回 MVVM

关闭时如何从模态视图控制器传回数据

关闭时如何从模态视图控制器传回数据