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

1 nsstring ios swift swift-playground

当我使用硬编码数据的直径和高度Swift运行模拟器很好,但当我尝试使用TextField.text.toInt()使用文本值,然后我不断收到非常恼人的错误消息: - 无法调用\ $ st15类型的参数列表

我哪里错了.我是Swift的新手,之前只使用过AppInventor来创建一个有几千次下载的应用程序.我是一个热情但可能很慢的学习者,但如果有人能帮助我一点点,我会到那儿.注意:公式只是PIr2 xh来给出汽缸容积.我想用直径来解释我每次减半的原因.

    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)"
Run Code Online (Sandbox Code Playgroud)

以下是与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)"
Run Code Online (Sandbox Code Playgroud)

rob*_*off 7

您的代码有几个错误.

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

接下来,String.toInt()返回一个Int?.问号意味着返回类型确实存在Optional<Int>.这是一个空((nil)或包含的容器Int.如果要使用该Int值,则需要打开它.但是,您可能想要检查它Optional不是nil第一个.

接下来,假设你打开它Int,你不能对Swift中的mixed IntDouble值执行算术运算.你必须转换为全部Int或全部Double.你可能想要全部使用Double.事实上,你可能根本不想转换IntDouble.您可能希望首先Double从文本字段中获取.有没有toDoubleString斯威夫特,但也有一些其他的方法来做到这一点.

最后,您需要说\(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)"
Run Code Online (Sandbox Code Playgroud)

如果要以Double本地化友好的方式将字符串转换为s,或者检测字符串何时无效Double,请查找NSNumberFormatter.