swift - 转换 - 展开一个可选值

标签 swift

我正在尝试编写一个BMI 计算器

@IBOutlet var height: UITextField!
@IBOutlet var weight: UITextField!    
@IBOutlet var message: UILabel!    
@IBAction func keyPressed(sender: AnyObject) {

    var peso = Double(weight.text.toInt()!)
    var altura = Double(height.text.toInt()!) //ERROR LINE
    var alturaquad = Double(peso) * Double(peso)  //EXPONENTIAL
    var imc = altura / alturaquad
    message.text = "Your BMI is \(imc)"
}

我收到以下错误,我还不明白:

fatal error: unexpectedly found nil while unwrapping an Optional value

我的第二个问题是关于指数函数的。是战俘吗?

最佳答案

StringtoInt() 方法返回一个可选的整数,即如果从 string 到 int 的转换成功,则返回一个有效整数,否则 nil 如果转换失败。

这里:

height.text.toInt()!

您使用的是强制解包运算符,它从可选值中解包整数,并假设它不是 nil - 如果可选值实际上是 nil,您就会遇到该错误。

Optionals、强制展开和像你这样的错误是关于堆栈溢出的反复出现的问题。建议你仔细阅读 Optionals .它在概念上很简单,但却是许多令人头疼的问题的根源 - 全面了解它们的工作原理对于任何快速开发人员来说都是必不可少的。提示:使用可选绑定(bind)来解决您的问题。

关于您的第二个问题,关于 pow:您尝试过吗?创建一个 playground 并对其进行测试 - 如果它不起作用,则提出一个新问题。

关于swift - 转换 - 展开一个可选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26617589/

相关文章:

swift - 重新排序 UITableView 单元格并跟踪索引

ios - 如何快速打印 Alamofire 中发布请求的响应的 json 内容?

ios - 无法从今天的扩展程序中打开主机应用程序

ios - 如何快速读取 UITextInput 中的文本?

swift - Swift 中的 Slice 比较逻辑是什么

swift - 给定两个点,我如何确定一个矩形是否会通过连接这些点的线

ios - CoreSpotlight 索引 - 图像加载

ios - 如何在照片库中获取重复的媒体?

IOS swift有没有办法使文本的特定部分加粗

ios - Swift - 将项目添加到数组时解包可选值时意外发现 nil