将输入数字存储在文本框中的变量中
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
}
}
这样就可以了。我记得是因为在那个阶段,属性可以存在。这意味着,它可以存在或不存在。这就是为什么你不能那样做。
虽然我不是很确定,但不要让我相信这个解释。
mmolText
是 self
上的 属性。你不能在那里引用它,因为 self
还没有被初始化。
您必须在 awakeFromNib
、viewDidLoad
等范围内分配它
似乎我们可能只是希望 mmol
存在作为从 mmolText
文本字段中获取 text
属性 的便捷方式,对吧?那么为什么不使用计算 属性:
var mmol: String {
get {
return mmolText.text ?? ""
}
set {
mmolText.text = newValue
}
}
get
使用 nil
合并运算符。 UITextField
的 text
属性 尚未更新为 ,因此我们需要处理它可能返回 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 的字符串版本完全按照您的意图显示。
在我的应用程序中,我有一个文本框,应该用 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
}
}
这样就可以了。我记得是因为在那个阶段,属性可以存在。这意味着,它可以存在或不存在。这就是为什么你不能那样做。
虽然我不是很确定,但不要让我相信这个解释。
mmolText
是 self
上的 属性。你不能在那里引用它,因为 self
还没有被初始化。
您必须在 awakeFromNib
、viewDidLoad
等范围内分配它
似乎我们可能只是希望 mmol
存在作为从 mmolText
文本字段中获取 text
属性 的便捷方式,对吧?那么为什么不使用计算 属性:
var mmol: String {
get {
return mmolText.text ?? ""
}
set {
mmolText.text = newValue
}
}
get
使用 nil
合并运算符。 UITextField
的 text
属性 尚未更新为 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 的字符串版本完全按照您的意图显示。