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

时间:2015-05-17 23:26:42

标签: ios swift variables textbox

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

  

'ViewController.Type'没有名为'mmolText'的成员。

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

screenshot

此处 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.
    }


}

3 个答案:

答案 0 :(得分:2)

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

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

get使用nil合并运算符。 UITextField text属性尚未使用Objective-C nullability annotations进行更新,因此我们需要处理可能返回nil的情况。< / p>

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

如果我们想要这个Double,我们可以修改上面的计算属性看起来更像这样:

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

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

答案 1 :(得分:1)

class ViewController: UIViewController {

    @IBOutlet weak var mmolText: UITextField!

    var mmol: String!

    override func viewDidLoad() {
        super.viewDidLoad()

        mmol = mmolText.text
    }
}

这种方式有效。我记得那样的事情,因为在那个阶段,属性可以存在。这意味着它可以存在或不存在。这就是为什么你不能这样做的原因。

但是,请不要告诉我这个解释,我不太确定。

答案 2 :(得分:0)

mmolTextself上的属性。你不能在那里引用它,因为self尚未初始化。

您必须在awakeFromNibviewDidLoad等内进行分配。