当我使用硬编码数据的直径和高度Swift运行模拟器很好,但当我尝试使用TextField.text.toInt()使用文本值时,我不断收到非常恼人的错误信息: - 无法使用$ st15
类型的参数列表调用\我哪里出错了。我是Swift的新手,之前只使用过AppInventor来创建一个有几千次下载的应用程序。我是一个热情但可能很慢的学习者,但如果有人能帮助我一点点,我会到那儿。注意:公式只是PIr2 x h来给出汽缸容积。我想用直径解释为什么我每次减半。
let PI = 3.142
var bodyDiameter = bodyDiameterTextField.text.toInt() // 3.0
var bodyHeight = bodyHeightTextField.text.toInt() // 10.0
var cylinderVolume: Double
var cylinderVolume = (PI * (bodyDiameter / 2.0) * (bodyDiameter / 2.0)) * bodyHeight
println("cylinderVolume")
cylinderVolumeLabel.text = "(cylinderVolume)"
以下是与Bodydiameter和Bodyheight的硬编码值相同的代码。这一切在游乐场和模拟器中都很棒。我猜它与Integers和Floats有关,但我可能会出局。
let PI = 3.142
var bodyDiameter = 3.0
var bodyHeight = 10.0
var cylinderVolume = (PI * (bodyDiameter / 2.0) * (bodyDiameter / 2.0)) * bodyHeight
println("cylinderVolume")
cylinderVolumeLabel.text = "(cylinderVolume)"
答案 0 :(得分:7)
您的代码有几处错误。
首先,而不是真正错误,已经有一个π的内置常量,名为M_PI
。使用它而不是定义自己的PI
常量。
接下来,String.toInt()
会返回Int?
。问号表示返回类型实际为Optional<Int>
。这是一个空(nil
)或包含Int
的容器。如果要使用Int
值,则需要打开它。不过,您可能想要检查Optional
是否不是nil
。
接下来,假设您打开Int
,您无法对Swift中的混合Int
和Double
值执行算术运算。您必须转换为所有Int
或全部Double
。您可能想要使用所有Double
。实际上,您可能根本不希望从Int
转换为Double
。您可能希望首先从文本字段中获取Double
。 Swift中toDouble
上没有String
,但还有其他一些方法可以做到。{/ p>
最后,您需要说\(cylinderVolume)
将值插入到字符串中。您的代码省略了\
。
试试这个:
var bodyDiameter = (bodyDiameterTextField.text as NSString).doubleValue
var bodyHeight = (bodyHeightTextField.text as NSString).doubleValue
var cylinderVolume = (M_PI * (bodyDiameter / 2.0) * (bodyDiameter / 2.0)) * bodyHeight
println("cylinderVolume: \(cylinderVolume)")
cylinderVolumeLabel.text = "(cylinderVolume)"
如果您想以本地化友好的方式将字符串转换为Double
,或者检测字符串何时无效Double
,请查找NSNumberFormatter
。