我正在创建一个温度转换器。当我运行应用程序时;输入温度,选择转换方式并点击转换。出现错误。 错误是: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/