init CBCentralManager:表达式类型不明确,没有更多上下文
init CBCentralManager: Type of expression is ambiguous without more context
正在尝试在 Swift 4.2 项目中初始化 CBCentralManager。
获取评论中显示的错误:
import CoreBluetooth
class SomeClass: NSObject, CBCentralManagerDelegate {
// Type of expression is ambiguous without more context
let manager: CBCentralManager = CBCentralManager(delegate: self, queue: nil)
// MARK: - Functions: CBCentralManagerDelegate
func centralManagerDidUpdateState(_ central: CBCentralManager) { }
}
如果我将 self
换成 nil
,错误就会消失,所以我认为我在遵守 CBCentralManagerDelegate
...[=14= 时遗漏了一些重要的东西]
我可以在没有委托的情况下使用经理吗?如果没有,我需要做什么来解决错误?
此处的诊断具有误导性。问题是你不能在你所在的地方引用 self
(self
会有 class,而不是实例)。
有几种方法可以解决这个问题,但常见的方法是 lazy
属性:
lazy var manager: CBCentralManager = {
return CBCentralManager(delegate: self, queue: nil)
}()
另一种方法是 !
变量:
var manager: CBCentralManager!
override init() {
super.init()
manager = CBCentralManager(delegate: self, queue: nil)
}
两者都有些丑陋,但它们是我们目前在 Swift 中所能做到的最好的。
请记住,lazy
方法在第一次被引用之前根本不会创建 CBCentralManager,因此对于这种特殊情况,使用 !
版本更为常见。
正在尝试在 Swift 4.2 项目中初始化 CBCentralManager。 获取评论中显示的错误:
import CoreBluetooth
class SomeClass: NSObject, CBCentralManagerDelegate {
// Type of expression is ambiguous without more context
let manager: CBCentralManager = CBCentralManager(delegate: self, queue: nil)
// MARK: - Functions: CBCentralManagerDelegate
func centralManagerDidUpdateState(_ central: CBCentralManager) { }
}
如果我将 self
换成 nil
,错误就会消失,所以我认为我在遵守 CBCentralManagerDelegate
...[=14= 时遗漏了一些重要的东西]
我可以在没有委托的情况下使用经理吗?如果没有,我需要做什么来解决错误?
此处的诊断具有误导性。问题是你不能在你所在的地方引用 self
(self
会有 class,而不是实例)。
有几种方法可以解决这个问题,但常见的方法是 lazy
属性:
lazy var manager: CBCentralManager = {
return CBCentralManager(delegate: self, queue: nil)
}()
另一种方法是 !
变量:
var manager: CBCentralManager!
override init() {
super.init()
manager = CBCentralManager(delegate: self, queue: nil)
}
两者都有些丑陋,但它们是我们目前在 Swift 中所能做到的最好的。
请记住,lazy
方法在第一次被引用之前根本不会创建 CBCentralManager,因此对于这种特殊情况,使用 !
版本更为常见。