在我的应用程序中,我有一个文本框,应该填充Double
,并且数字应该保存到变量中,但是有错误。
我将文本框拖放到ViewController.swift
中,因此应将其链接。我创建了一个@IBOutlet
。我调用了文本框mmolText
和变量mmol
。
我尝试过类似:var mmol = mmolText.text
但它显示错误:
'ViewController.Type'没有名为'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.
}
}
答案 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)
mmolText
是self
上的属性。你不能在那里引用它,因为self
尚未初始化。
您必须在awakeFromNib
,viewDidLoad
等内进行分配。