OBD2Kit Swift示例不能进行类型转换,不断变为零

由于没有使用OBD2Kit和Swift的示例代码,我将其分解为https://github.com/YannisDC/OBD2Kit并将其用作pod。

我翻译了一些OBJ-C示例代码,但似乎无法将FLWiFiScanTool转换为ELM327类型。 为什么我一直都没有?

import UIKit import OBD2Kit class ViewController: UIViewController, FLScanToolDelegate { @IBOutlet weak var hostIpAddress: UITextField! var scanTool: ELM327! @IBOutlet weak var statusLabel: UILabel! @IBOutlet weak var scanToolLabel: UILabel! @IBOutlet weak var rpmLabel: UILabel! @IBOutlet weak var speedLabel: UILabel! @IBOutlet weak var tempLabel: UILabel! var scanning = false override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.hostIpAddress.text = "192.168.0.10" } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func scanButton(sender: UIButton) { if !scanning { startScan() } else { stopScan() } } func startScan() { if let scanTool = ELM327(host: self.hostIpAddress.text!, andPort: 35000) { self.statusLabel.text = "Initializing..." scanTool.useLocation = true scanTool.delegate = self scanTool.startScanWithSensors({() -> [AnyObject] in dispatch_async(dispatch_get_main_queue(), {() -> Void in self.statusLabel.text = "Scanning..." self.scanToolLabel.text = scanTool.scanToolName }) // let sensors: [AnyObject] = [ OBD2Sensor.SensorEngineRPM as! AnyObject, // OBD2Sensor.SensorVehicleSpeed as! AnyObject, // OBD2Sensor.SensorOxygenSensorsPresent as! AnyObject ] let sensors: [AnyObject] = [ 0x0C, 0x0D, 0x13 ] return sensors }) self.scanTool = scanTool print("So far succesfull") scanning = !scanning } else { self.statusLabel.text = "Not working" } } func stopScan() { statusLabel.text = "Stopped" let scanTool: ELM327 = self.scanTool scanTool.cancelScan() scanTool.sensorScanTargets = nil scanTool.delegate = nil scanning = !scanning } // MARK: - FLScanToolDelegate func scanTool(scanTool: FLScanTool, sensor: FLECUSensor) { var sensorLabel: UILabel? = nil switch sensor.pid { case OBD2Sensor.SensorEngineRPM: sensorLabel = self.rpmLabel case OBD2Sensor.SensorVehicleSpeed: sensorLabel = self.speedLabel default: sensorLabel = self.tempLabel } self.showSensorValue(sensor, onLabel: sensorLabel!) } func showSensorValue(sensor: FLECUSensor, onLabel label: UILabel) { let sensorValue: String = "\(sensor.valueStringForMeasurement1(false)) \(sensor.imperialUnitString)" dispatch_async(dispatch_get_main_queue(), {() -> Void in label.text = sensorValue }) } } 

编辑1:

我现在已经可以扫描这个工具,因为ELM327是一个FLWiFiScanTool,而不是相反。 我可以得到工具名,所以它连接但似乎无法获得传感器输出。

我设法搞清楚了。 预期的传感器arrays应该是NSNumbers之一,所以我将传感器UInt转换为NSNumbers。 我还错过了scanTool函数中的didUpdateSensor部分。

确保使用公制系统,在我的情况下,这在某种程度上更可靠。 (我的车也在使用公制系统,也许这就是原因。)

 import UIKit import OBD2Kit class ViewController: UIViewController, FLScanToolDelegate { var scanTool: ELM327! @IBOutlet weak var statusLabel: UILabel! @IBOutlet weak var scanToolLabel: UILabel! @IBOutlet weak var rpmLabel: UILabel! @IBOutlet weak var speedLabel: UILabel! @IBOutlet weak var tempLabel: UILabel! var scanning = false override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } @IBAction func scanButton(sender: UIButton) { if !scanning { startScan() } else { stopScan() } } func startScan() { if let scanTool = ELM327(host: "192.168.0.10", andPort: 35000) { self.statusLabel.text = "Initializing..." scanTool.useLocation = true scanTool.delegate = self scanTool.startScanWithSensors({() -> [AnyObject] in dispatch_async(dispatch_get_main_queue(), {() -> Void in self.statusLabel.text = "Scanning..." self.scanToolLabel.text = scanTool.scanToolName }) let sensors: [AnyObject] = [ OBD2Sensor.SensorEngineRPM as NSNumber, OBD2Sensor.SensorVehicleSpeed as NSNumber, OBD2Sensor.SensorOxygenSensorsPresent as NSNumber ] return sensors }) self.scanTool = scanTool print("So far succesfull") scanning = !scanning } else { self.statusLabel.text = "Not working" } } func stopScan() { statusLabel.text = "Stopped" let scanTool: ELM327 = self.scanTool scanTool.cancelScan() scanTool.sensorScanTargets = nil scanTool.delegate = nil scanning = !scanning } // MARK: - FLScanToolDelegate func scanTool(scanTool: FLScanTool!, didUpdateSensor sensor: FLECUSensor!) { var sensorLabel: UILabel? = nil switch sensor.pid { case OBD2Sensor.SensorEngineRPM: sensorLabel = self.rpmLabel case OBD2Sensor.SensorVehicleSpeed: sensorLabel = self.speedLabel default: sensorLabel = self.tempLabel } self.showSensorValue(sensor, onLabel: sensorLabel!) } func showSensorValue(sensor: FLECUSensor, onLabel label: UILabel) { let sensorValue: String = "\(sensor.valueStringForMeasurement1(true)) \(sensor.metricUnitString)" dispatch_async(dispatch_get_main_queue(), {() -> Void in label.text = sensorValue }) } }