我对Swift和基本几何有什么问题

时间:2014-12-16 21:49:46

标签: ios swift nsstring swift-playground

当我使用硬编码数据的直径和高度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)"

1 个答案:

答案 0 :(得分:7)

您的代码有几处错误。

首先,而不是真正错误,已经有一个π的内置常量,名为M_PI。使用它而不是定义自己的PI常量。

接下来,String.toInt()会返回Int?。问号表示返回类型实际为Optional<Int>。这是一个空(nil)或包含Int的容器。如果要使用Int值,则需要打开它。不过,您可能想要检查Optional是否不是nil

接下来,假设您打开Int,您无法对Swift中的混合IntDouble值执行算术运算。您必须转换为所有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