swift - EXC_BAD_INSTRUCTION(代码 = EXC_I386_INVOP,子代码 = 0x0)

标签 swift compiler-errors exc-bad-instruction

我正在创建一个温度转换器。当我运行应用程序时;输入温度,选择转换方式并点击转换。出现错误。 错误是:EXC_BAD_INSTRUCTION(代码 = EXC_I386_INVOP,子代码 = 0x0)

这是我的 ViewController 代码:

import UIKit

class ViewController: UIViewController,UIPickerViewDataSource,UIPickerViewDelegate {

@IBOutlet weak var orginalValue: UITextField!

@IBOutlet weak var convertFrom: UIPickerView!
let pickerData = ["Celsius", "Fahrenheit"]

override func viewDidLoad() {
    super.viewDidLoad()
    convertFrom.dataSource = self
    convertFrom.delegate = self
}

@IBOutlet weak var labelConvertFrom: UILabel!

@IBOutlet weak var convertTo: UIPickerView!

@IBOutlet weak var labelConverTo: UILabel!

@IBOutlet weak var answer: UILabel!

@IBAction func convertButton(sender: AnyObject) {
    let a = Double(orginalValue.text!)
    let tempConvertM = TempConvert(temp: a!)
    answer.text = String(tempConvertM.convert())

}

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return pickerData.count
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return pickerData[row]
}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    labelConvertFrom.text = pickerData[row]
}



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

这是我遇到错误的地方。 TempConverterModel.swift

 import Foundation

 extension ViewController{
 class TempConvert{

    var temp:Double
    var view = ViewController()

    init (temp:Double){
        self.temp = temp
    }

    func convert()->Double{
        if(view.labelConvertFrom.text == "Celsius"){ -->ERROR IS HIGHLIGHTED HERE <--
           view.labelConverTo.text = "Fahrenheit"
           return (temp-32)/1.8000; //fahrenheit formula
        }
        else{
            view.labelConverTo.text = "Celsius"
            return (temp*1.8000)+32; //celsius formula
        }

    }
}
}

我不知道我做错了什么。我想检查 labelConvertFrom 中的文本并检查它是否等于“摄氏度”。如果它没有返回答案。

我非常感谢任何人的帮助。谢谢!

最佳答案

作为par指出,您应该删除封闭的 extension ViewController { } 并将您的 TempConvert 作为一个单独的类。

此外,与其尝试在 TempConvert 中访问 ViewController 的实例变量,不如在 convertButton() 中进行比较> ViewController 类本身中的方法,并在 TempConvert 类中调用适当的转换方法。

更好的方法是在 ViewController 类中为“摄氏度”设置一个存储属性,为“华氏度”设置一个计算属性。可以引用这个link Swift 语言中的属性

关于swift - EXC_BAD_INSTRUCTION(代码 = EXC_I386_INVOP,子代码 = 0x0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33772231/

相关文章:

java - 发现多个文件具有独立于操作系统的路径 'convertGermanToBoolean.properties'

Swift Admob 问题的主题 1 : EXC_BAD_INSTRUCTION

C++成员初始化、复制初始化和默认初始化

swift - EXC_BAD_INSTRUCTION 错误

swift - delegate = self 导致线程 1 : exc_bad_instruction (code=exc_i386_invop subcode=0x0)

objective-c - Swift 中的调用

ios - 如何快速创建如下图所示的自定义导航栏?

javascript - 将两个云代码函数合并为一个函数

ios - Swift 核心数据与 Web 服务器同步

c++ - 标识符 int 不是 struct SOCKET_LOG_DATA 的直接成员