将输入数字存储在文本框中的变量中

Store input number inside a variable from a textbox

在我的应用程序中,我有一个文本框,应该用 Double 填充,数字应该保存到一个变量中,但是有一个错误。 我将文本框拖放到 ViewController.swift 中,因此它应该被链接。我创建了一个 @IBOutlet。我调用了文本框 mmolText 和变量 mmol。 我试过类似的东西:var mmol = mmolText.text 但它显示错误:

'ViewController.Type' does not have a member named 'mmolText'.

有什么问题吗?我该如何解决?除了文本框内容的类型是字符串,但我应该将其转换为 Double.

这里ViewController.swift的代码是:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var mmolText: UITextField!
    var mmol = mmolText.text
    @IBOutlet weak var mmolLabel: UILabel!
    @IBOutlet weak var mgLabel: UILabel!
    @IBAction func convertBM(sender: AnyObject) {

    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}
class ViewController: UIViewController {

    @IBOutlet weak var mmolText: UITextField!

    var mmol: String!

    override func viewDidLoad() {
        super.viewDidLoad()

        mmol = mmolText.text
    }
}

这样就可以了。我记得是因为在那个阶段,属性可以存在。这意味着,它可以存在或不存在。这就是为什么你不能那样做。

虽然我不是很确定,但不要让我相信这个解释。

mmolTextself 上的 属性。你不能在那里引用它,因为 self 还没有被初始化。

您必须在 awakeFromNibviewDidLoad 等范围内分配它

似乎我们可能只是希望 mmol 存在作为从 mmolText 文本字段中获取 text 属性 的便捷方式,对吧?那么为什么不使用计算 属性:

var mmol: String {
    get {
        return mmolText.text ?? ""
    }
    set {
        mmolText.text = newValue
    }
}

get 使用 nil 合并运算符。 UITextFieldtext 属性 尚未更新为 ,因此我们需要处理它可能返回 nil 的情况。

如果我们希望它是 readonly,我们可以简单地省略 set 部分。


如果我们希望它成为 Double,我们可以修改上面计算的 属性 使其看起来更像这样:

var mmol: Double {
    get {
        return ((mmolText.text ?? "0") as NSString).doubleValue
    }
    set {
        mmolText.text = String("%f", newValue)
    }
}

同样,如果我们希望它是 readonly,我们可以简单地省略 set 的一半。当然,在使用此 set 方法时,可以使用格式字符串来使 double 的字符串版本完全按照您的意图显示。