初始化程序由于内部'而无法访问保护级别 - Swift 4 iOS

时间:2018-03-16 04:36:15

标签: ios swift4 xcode9

我对Swift编程有点新意,请原谅我,如果这看起来很愚蠢。我在ViewController外部有一个类,我想在ViewController中实例化,但是我收到一个错误:

初始化程序由于内部'而无法访问保护水平

班级:

public class TappyBleScanner : NSObject, CBCentralManagerDelegate {

      public var manager : CBCentralManager = CBCentralManager(delegate: self, queue : nil)

      public init(){} //based on other posts, I thought this would solve it
}

ViewController中的代码:

    public func scanForTappyBle() {

    var tappyScanner : TappyBleScanner = TappyBleScanner() //<- This is where Xcode 9 reports the error


}

其他帖子herehere建议明确地创建一个空的公共初始化程序会解决此问题,但错误仍然存​​在。 Swift documentation似乎暗示public public no argument init()函数会允许外部模块访问初始化程序,从而实例化这个类:

  

如果希望使用无参数初始化公共类型   初始化程序在另一个模块中使用时,必须明确提供一个   公共无参数初始化自己作为类型的一部分   定义

然而,错误仍然存​​在,任何想法?

1 个答案:

答案 0 :(得分:0)

我甚至无法编译你拥有的东西(Xcode 9.2)。您需要覆盖init()。并且你不能在管理器的静态初始化中使用self。

如果您将TappyBleScanner更改为以下内容,则会编译并运行。 :)

public class TappyBleScanner : NSObject, CBCentralManagerDelegate
{
    public var manager : CBCentralManager?

    override init()
    {
        super.init()
        self.manager = CBCentralManager(delegate: self, queue : nil)
    }

    public func centralManagerDidUpdateState(_ central: CBCentralManager)
    {
    }
}