繁体   English   中英

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

[英]initializer is inaccessible due to 'internal' protection level - Swift 4 iOS

我对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


}

此处此处的其他文章建议显式创建一个空的公共初始化程序可以解决此问题,但错误仍然存​​在。 Swift 文档似乎建议公共无参数init()函数允许外部模块访问初始化程序,从而实例化此类:

如果要在另一个模块中使用某个公共参数时使用无参数初始化器来对其进行初始化,则必须自己明确地提供一个公共无参数初始化器作为类型定义的一部分。

但是错误仍然存​​在,有什么想法吗?

我什至无法编译您所拥有的(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)
    {
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM