SWIFT 4 - 无法将类型 'UITextField!' 的值转换为预期的参数类型 'Double'
SWIFT 4 - Cannot convert value of type 'UITextField!' to expected argument type 'Double'
我正在尝试创建这个基本的地球曲率公式,我让它在操场上工作,但我很难从 UITextField 获取距离,从字符串类型的故事板到 Double 所以它可以进行计算。我试过 downcasting 等,但仍然无法正常工作。
class ViewController: UIViewController {
// MARK: - IBOutlets
@IBOutlet weak var distanceTextField: UITextField! // Distance from point A to B in miles from textField
@IBOutlet weak var targetHiddenInFeet: UILabel! // Result of earth curvature formula displayed in Label
// MARK: - Variables and Contsants
let inchPerMile : Double = 8 // inch drop per mile (Never changes)
// MARK: - IBActions
@IBAction func calculateButtonPressed(_ sender: UIButton) {
let distanceSquared : Double = pow(distanceTextField,2)
let curvatureFormula : Double = inchPerMile * distanceSquared
let convertionInFeet : Double = curvatureFormula / 12
let roundedNumber = String(format: "%.2f", convertionInFeet)
print(roundedNumber)
return targetHiddenInFeet.text = roundedNumber
}
您必须先从 TextField 中获取文本
distanceTextField.text
然后要将其转换为 double,您可以像这样使用类型初始化程序
Double(distanceTextField.text)
所以读作
的那一行
let distanceSquared : Double = pow(distanceTextField,2)
会变成
let distanceSquared : Double = pow(Double(distanceTextField.text), 2)
如果输入的文本无法转换为 Double,此初始化可能会失败,因此以下代码将提供安全性
if let distance = Double(distanceTextField.text!) {
let distanceSquared : Double = pow(distance, 2)
} else {
//failed to convert textfield text to a double
}
主要错误是您试图将 UITextField
对象转换为数字,但您必须通过 text
accessor 从文本输入中获取值。像这样 let distanceSquared : Double = pow(distanceTextField.text, 2)
.
其次,text
属性 是可选的,因此最好检查您是否有值,例如 guard
语句。在 func calculateButtonPressed(...)
开头的 guard let distance = distanceTextField.text else { return }
类似这样的内容。在输入为空的情况下,你的函数将不会被执行(通常它被称为'early return')。
第三,检查文本是否为实数是个好习惯(Double
function returns optional value if you pass String
and it's nil如果输入不是数字),那么最终的解决方案可能如下所示:
@IBAction func calculateButtonPressed(_ sender: UIButton) {
guard let distance = Double(distanceTextField.text) else { return }
let distanceSquared : Double = pow(distance, 2)
let curvatureFormula : Double = inchPerMile * distanceSquared
let convertionInFeet : Double = curvatureFormula / 12
let roundedNumber = String(format: "%.2f", convertionInFeet)
print(roundedNumber)
targetHiddenInFeet.text = roundedNumber
}
P.S。另外,我删除了函数末尾的 return
语句,因为它不是必需的(默认情况下你的函数 return Void
)。
编码愉快!
我正在尝试创建这个基本的地球曲率公式,我让它在操场上工作,但我很难从 UITextField 获取距离,从字符串类型的故事板到 Double 所以它可以进行计算。我试过 downcasting 等,但仍然无法正常工作。
class ViewController: UIViewController {
// MARK: - IBOutlets
@IBOutlet weak var distanceTextField: UITextField! // Distance from point A to B in miles from textField
@IBOutlet weak var targetHiddenInFeet: UILabel! // Result of earth curvature formula displayed in Label
// MARK: - Variables and Contsants
let inchPerMile : Double = 8 // inch drop per mile (Never changes)
// MARK: - IBActions
@IBAction func calculateButtonPressed(_ sender: UIButton) {
let distanceSquared : Double = pow(distanceTextField,2)
let curvatureFormula : Double = inchPerMile * distanceSquared
let convertionInFeet : Double = curvatureFormula / 12
let roundedNumber = String(format: "%.2f", convertionInFeet)
print(roundedNumber)
return targetHiddenInFeet.text = roundedNumber
}
您必须先从 TextField 中获取文本
distanceTextField.text
然后要将其转换为 double,您可以像这样使用类型初始化程序
Double(distanceTextField.text)
所以读作
的那一行let distanceSquared : Double = pow(distanceTextField,2)
会变成
let distanceSquared : Double = pow(Double(distanceTextField.text), 2)
如果输入的文本无法转换为 Double,此初始化可能会失败,因此以下代码将提供安全性
if let distance = Double(distanceTextField.text!) {
let distanceSquared : Double = pow(distance, 2)
} else {
//failed to convert textfield text to a double
}
主要错误是您试图将 UITextField
对象转换为数字,但您必须通过 text
accessor 从文本输入中获取值。像这样 let distanceSquared : Double = pow(distanceTextField.text, 2)
.
其次,text
属性 是可选的,因此最好检查您是否有值,例如 guard
语句。在 func calculateButtonPressed(...)
开头的 guard let distance = distanceTextField.text else { return }
类似这样的内容。在输入为空的情况下,你的函数将不会被执行(通常它被称为'early return')。
第三,检查文本是否为实数是个好习惯(Double
function returns optional value if you pass String
and it's nil如果输入不是数字),那么最终的解决方案可能如下所示:
@IBAction func calculateButtonPressed(_ sender: UIButton) {
guard let distance = Double(distanceTextField.text) else { return }
let distanceSquared : Double = pow(distance, 2)
let curvatureFormula : Double = inchPerMile * distanceSquared
let convertionInFeet : Double = curvatureFormula / 12
let roundedNumber = String(format: "%.2f", convertionInFeet)
print(roundedNumber)
targetHiddenInFeet.text = roundedNumber
}
P.S。另外,我删除了函数末尾的 return
语句,因为它不是必需的(默认情况下你的函数 return Void
)。
编码愉快!