首页 > 解决方案 > 由于“内部”保护级别,sharedInstance 无法访问

问题描述

我已经导入了一个 cocoapod,它有助于将我的应用程序连接到蓝牙低功耗设备。尝试访问该类的实例时,我收到错误 sharedInstance is inaccessible 由于“内部”保护级别。为什么我会收到此错误?

下面是包含该实例的类。

import Foundation
import CoreBluetooth
import Alamofire
import SwiftyJSON

public class OBD2_BLE: NSObject, CBCentralManagerDelegate, 
CBPeripheralDelegate {

    var centralManager: CBCentralManager!
    var obd2: CBPeripheral?
    var dataCharacteristic:CBCharacteristic?

    var obdCommands:[String: String]! = [
        "speed": "010D",
        "vin": "0902"
    ]

    var configurationCommands = [
        "ATE0",
        "ATH0",
        "ATS0",
        "ATL0",
        "ATSP0"
    ]

    var obdResponse:[UInt8] = []
    let endOfResponseNotificationIdentifier = 
Notification.Name("endOfResponseNotificationIdentifier")

    // setupOutput is expected output from device after reset (no prior 
configuration)
    // partialsetupOutput is expected output from device without reset 
(device remained configured from previous run)
    let restartSetupOutput = "\r\rELM327 
v1.5\r\r>ATE0\rOK\r\r>OK\r\r>OK\r\r>OK\r\r>OK\r\r>"
    let setupOutput = "ATE0\rOK\r\r>OK\r\r>OK\r\r>OK\r\r>OK\r\r>"
    let partialsetupOutput = "OK\r\r>OK\r\r>OK\r\r>OK\r\r>OK\r\r>"
    var setupComplete = false

    var vinNumber:String?

    static let sharedInstance = OBD2_BLE()
    private static let setup = OBD2_BLESetup()

    class func setup(restoreId: String){
        OBD2_BLE.setup.restoreId = restoreId

    }


    public override init() {
        super.init()

        let restoreId = OBD2_BLE.setup.restoreId

        if restoreId == nil {
            self.initWithoutBackground()
        } else {
            self.initWithBackground(restoreId: restoreId!)
        }
    }

下面是我尝试访问实例

import UIKit
import CoreBluetooth
import OBD2_BLE

class BluetoothViewController: UIViewController, UITableViewDelegate {

    @IBOutlet weak var bluetoothTableView: UITableView!
    var deviceArray = [CBPeripheral]()

    var centralManager : CBCentralManager!
    var currentPeripheral : CBPeripheral?

    let obd2 = OBD2_BLE.sharedInstance // Where i receive error

    var currentRow : IndexPath?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        centralManager = CBCentralManager(delegate: self, queue: nil)
        bluetoothTableView.dataSource = self
        bluetoothTableView.delegate = self

    }

标签: iosswiftswift4core-bluetoothobd-ii

解决方案


推荐阅读