ios - 将 var 转换为 float 以进行数学运算

标签 ios function swift math

我正在使用 swift 使用 xcode 编写一个简单的应用程序。我会创建一个计算 BMR 的函数,但这里存在一些问题。我该如何修复它们?这是我的代码:

import UIKit
class ViewController: UIViewController {     
    @IBOutlet var Age: UILabel!
    @IBOutlet var Height: UILabel!
    @IBOutlet var Weight: UILabel!
    @IBOutlet var agefield: UITextField!
    @IBOutlet var heightfield: UITextField!
    @IBOutlet var weightfield: UITextField!
    @IBOutlet var BMR: UILabel!
    @IBAction func Calculate(sender: UIButton) {
        var a = "66,0"
        var b = "13,7"
        var c = (weightfield.text as NSString).floatValue
        var d = "5,0"
        var e = (heightfield.text as NSString).floatValue
        var f = "6,8"
        var g = (agefield.text as NSString).floatValue
        var result = a + (b * c) + (d * e) - (f * g)
        BMR.text = "\(result)"

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

c、e 和 g 值取决于文本字段 “var result”行有一个错误:“找不到接受所提供参数的‘+’的重载” 然后,我创建了一个 Playground ,我用实数更改了 c、e 和 g 变量,它起作用了!

var a = 66.0
var b = 13.7
var c = 72.0
var d = 5.0
var e = 178.0
var f = 6.8
var g = 16.0

var result = a + (b * c) + (d * e) - (f * g)

print(result)

有什么想法吗? 提前致谢

--

let a:Float = 66.0
let b:Float = 13.7
var c = (weightfield.text as NSString).floatValue
let d:Float = 5.0
var e = (heightfield.text as NSString).floatValue
let f:Float = 6.8
var g = (agefield.text as NSString).floatValue
var result = a + (b * c) + (d * e) - (f * g)
BMR.text = "\(result)"

Hexagon,感谢您的宝贵帮助。这是更改后的代码。没有问题 :D ...但是有 SIGABRT 信号,所以应用程序无法运行。哪里出错了?

--

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Calculator.ViewController 0x7fcf28467e20> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key BMI.'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000109f77c65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000010bae2bb7 objc_exception_throw + 45
    2   CoreFoundation                      0x0000000109f778a9 -[NSException raise] + 9
    3   Foundation                          0x000000010a395b53 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
    4   CoreFoundation                      0x0000000109ebfd50 -[NSArray makeObjectsPerformSelector:] + 224
    5   UIKit                               0x000000010aaee52b -[UINib instantiateWithOwner:options:] + 1506
    6   UIKit                               0x000000010a946718 -[UIViewController _loadViewFromNibNamed:bundle:] + 242
    7   UIKit                               0x000000010a946d08 -[UIViewController loadView] + 109
    8   UIKit                               0x000000010a946f79 -[UIViewController loadViewIfRequired] + 75
    9   UIKit                               0x000000010a94740e -[UIViewController view] + 27
    10  UIKit                               0x000000010a8622c9 -[UIWindow addRootViewControllerViewIfPossible] + 58
    11  UIKit                               0x000000010a86268f -[UIWindow _setHidden:forced:] + 247
    12  UIKit                               0x000000010a86ee21 -[UIWindow makeKeyAndVisible] + 42
    13  UIKit                               0x000000010a812457 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2732
    14  UIKit                               0x000000010a8151de -[UIApplication _runWithMainScene:transitionContext:completion:] + 1349
    15  UIKit                               0x000000010a8140d5 -[UIApplication workspaceDidEndTransaction:] + 179
    16  FrontBoardServices                  0x000000010d5f25e5 __31-[FBSSerialQueue performAsync:]_block_invoke_2 + 21
    17  CoreFoundation                      0x0000000109eab41c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    18  CoreFoundation                      0x0000000109ea1165 __CFRunLoopDoBlocks + 341
    19  CoreFoundation                      0x0000000109ea0947 __CFRunLoopRun + 887
    20  CoreFoundation                      0x0000000109ea0366 CFRunLoopRunSpecific + 470
    21  UIKit                               0x000000010a813b42 -[UIApplication _run] + 413
    22  UIKit                               0x000000010a816900 UIApplicationMain + 1282
    23  Calculator                          0x0000000109d6dcd7 main + 135
    24  libdyld.dylib                       0x000000010c23a145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

最佳答案

您正在尝试将 String 值与 Float 值相乘/相加。此外,如果您不键入文字数字,它们将是 Double,同样不要在没有转换的情况下与 Float 混合。例如,这是可行的:

@IBAction func Calculate(sender: UIButton) {
    var a:Float = 66.0
    var b:Float = 13.7
    var c = (weightfield.text as NSString).floatValue
    var d:Float = 5.0
    var e = (heightfield.text as NSString).floatValue
    var f:Float = 6.8
    var g = (agefield.text as NSString).floatValue
    var result = a + (b * c) + (d * e) - (f * g)
    BMR.text = "\(result)"
}

关于ios - 将 var 转换为 float 以进行数学运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30575643/

相关文章:

swift - 快速检查或验证波斯语(波斯语)字符串

swift - 无法从不同的 VC Swift 获取 switch 的值

c - 传入指针作为参数以获取字符串长度

c++ - 在即将到来的 c++0x 标准下,我们可以通过这种语法将数组作为参数传递给函数吗?

iphone - 从代码中的任何位置弹出模态视图

ios - 如何在绘图之前清理 CGContextRef?

javascript - 创建一个函数来排序表 React,JSX

ios - 缩放按钮以适合背景图像

ios - 快速返回另一页后, TableView 单元格正在复制

ios - 是否可以使用 IMDF 从 Apple 创建像机场一样的 IndoorMaps?