Swift3 如何修复无法分配类型为';的值;双倍';至';字符串?';迅捷3
我是一个快速的初学者,然后想写一个体重指数计数 错误无法将“Double”类型的值分配给“String” 出现在label.text=GetBMI(H:myH,W:myW)中 我怎样才能修好它Swift3 如何修复无法分配类型为';的值;双倍';至';字符串?';迅捷3,swift3,Swift3,我是一个快速的初学者,然后想写一个体重指数计数 错误无法将“Double”类型的值分配给“String” 出现在label.text=GetBMI(H:myH,W:myW)中 我怎样才能修好它 @IBAction func calBMI(_ sender: AnyObject) { if Height.text != nil && Weight.text != nil { let myH : Double = (Height.text! as Any
@IBAction func calBMI(_ sender: AnyObject) {
if Height.text != nil && Weight.text != nil {
let myH : Double = (Height.text! as AnyObject).doubleValue
let myW : Double = (Weight.text! as AnyObject).doubleValue
label.text = GetBMI(H: myH, W: myW)
}
else {
label.text = "Please enter your Height and Weight!"
}
}
func GetBMI(H: Double, W: Double) -> Double {
let height: Double = H / 100
return W / (height * height)
}
您可以发现一些描述如何修复的线程无法将类型为“Double”的值分配给“String?”,但不幸的是,这些线程可能没有指出代码中的一些不好的部分 如果我要修复所有这些部件:
@IBOutlet var heightField: UITextField! //Renamed `Height` to `heightField`
@IBOutlet var weightField: UITextField! //Renamed `Weight` to `weightField`
@IBAction func calBMI(_ sender: AnyObject) {
if //Optional binding (using `if-let`) is the more preferred way than `!= nil` and forced unwrapping.
let heightText = heightField.text,
let weightText = weightField.text,
//You should not use `(... as AnyObject).doubleValue` to convert `String` to `Double`
//and should check if the text values are valid representation of Double
let myH = Double(heightText),
let myW = Double(weightText)
{
//This is the key point for the error "Cannot assign value of type 'Double' to 'String?'"
label.text = String(getBMI(h: myH, w: myW)) //You need to convert `Double` to `String`
}
else {
label.text = "Please enter your Height and Weight!"
}
}
//Renamed `GetBMI(H:W:)` to `getBMI(h:w:)`
func getBMI(h: Double, w: Double) -> Double {
let height: Double = h / 100
return w / (height * height)
}
有几点:
- 属性名称应表示内容的功能。在代码中,使用
和height
作为weight
值,因此最好将Double
s(假设UITextField
和height
是weight
s)与其他名称一起命名。我将它们重命名为UITextField
和heightField
weightField
- 使用
然后应用强制展开(进行测试!=nil
)不是首选方法,您最好避免使用!
,最好使用可选绑定--代码>尽可能多。如果让
- 您不应使用
将(…作为任何对象)。doubleValue
转换为字符串
。您可以使用Double
的初始值设定项将Double
转换为String
(#1)。它返回Double
,因此如果让它们,最好将它们包含在可选的
中
- 不能直接将
值分配给Double
类型的属性。您可以使用String?
的初始值设定项将String
转换为Double
(#1)String
- 在Swift中,通常只对类型使用大写标识符,因此我将
重命名为GetBMI(H:W:)
GetBMI(H:W:)
String
和Double
之间转换时使用初始值设定项是一种简化的方法。它可能足以制作BMI计算器教程代码,但可能不足以用于实际应用程序。考虑在实际应用程序中使用<代码> NSNumberFormatter <代码>。< /P>
粗体行是必需的或强烈建议的。您可以找到一些描述如何修复的线程无法将类型为“Double”的值分配给“String”,但不幸的是,这些线程可能没有指出代码中的一些不好的部分
label.text = String(GetBMI(H: myH, W: myW))
如果我要修复所有这些部件:
@IBOutlet var heightField: UITextField! //Renamed `Height` to `heightField`
@IBOutlet var weightField: UITextField! //Renamed `Weight` to `weightField`
@IBAction func calBMI(_ sender: AnyObject) {
if //Optional binding (using `if-let`) is the more preferred way than `!= nil` and forced unwrapping.
let heightText = heightField.text,
let weightText = weightField.text,
//You should not use `(... as AnyObject).doubleValue` to convert `String` to `Double`
//and should check if the text values are valid representation of Double
let myH = Double(heightText),
let myW = Double(weightText)
{
//This is the key point for the error "Cannot assign value of type 'Double' to 'String?'"
label.text = String(getBMI(h: myH, w: myW)) //You need to convert `Double` to `String`
}
else {
label.text = "Please enter your Height and Weight!"
}
}
//Renamed `GetBMI(H:W:)` to `getBMI(h:w:)`
func getBMI(h: Double, w: Double) -> Double {
let height: Double = h / 100
return w / (height * height)
}
有几点:
- 属性名称应表示内容的功能。在代码中,使用
和height
作为weight
值,因此最好将Double
s(假设UITextField
和height
是weight
s)与其他名称一起命名。我将它们重命名为UITextField
和heightField
weightField
- 使用
然后应用强制展开(进行测试!=nil
)不是首选方法,您最好避免使用!
,最好使用可选绑定--代码>尽可能多。如果让
- 您不应使用
将(…作为任何对象)。doubleValue
转换为字符串
。您可以使用Double
的初始值设定项将Double
转换为String
(#1)。它返回Double
,因此如果让它们,最好将它们包含在可选的
中
- 不能直接将
值分配给Double
类型的属性。您可以使用String?
的初始值设定项将String
转换为Double
(#1)String
- 在Swift中,通常只对类型使用大写标识符,因此我将
重命名为GetBMI(H:W:)
GetBMI(H:W:)
String
和Double
之间转换时使用初始值设定项是一种简化的方法。它可能足以制作BMI计算器教程代码,但可能不足以用于实际应用程序。考虑在实际应用程序中使用<代码> NSNumberFormatter <代码>。< /P>
必须或强烈建议使用粗体线条
label.text = String(GetBMI(H: myH, W: myW))
函数返回一个double,label.text将只接受一个字符串。因此,您会收到错误消息:无法将“Double”类型的值分配给“String”
错误中的问号可能会把你甩了。这个因为label.text可能为空,所以它是“可选”的,即:可能有值,也可能没有值。相反的!它明确声明存在一个值,并且是!=零
函数返回一个double,label.text将只接受一个字符串。因此,您会收到错误消息:无法将“Double”类型的值分配给“String”
错误中的问号可能会把你甩了。这个因为label.text可能为空,所以它是“可选”的,即:可能有值,也可能没有值。相反的!它明确声明存在一个值,并且是!=零