我对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
}
其他帖子here和here建议明确地创建一个空的公共初始化程序会解决此问题,但错误仍然存在。 Swift documentation似乎暗示public public no argument init()函数会允许外部模块访问初始化程序,从而实例化这个类:
如果希望使用无参数初始化公共类型 初始化程序在另一个模块中使用时,必须明确提供一个 公共无参数初始化自己作为类型的一部分 定义
然而,错误仍然存在,任何想法?
答案 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)
{
}
}