ios - init 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
...
我可以在没有委托的情况下使用经理吗?如果没有,我需要做什么来解决错误?
解决方案
这里的诊断具有误导性。问题是你不能self
在你所在的地方引用(self
会有类,而不是实例)。
有几种方法可以解决这个问题,但常见的方法是使用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,因此在!
这种特殊情况下使用该版本更为常见。
推荐阅读
- sql - 从最大值获取行ID
- bash - crontab 关闭后台进程?
- vue.js - 如何更新手动安装的 vue 组件上的道具?
- c# - 数据未绑定到 C# ListView(第二次尝试后)
- django - django select2 链式下拉菜单
- c - macOS Maverick 10.13.6 中的 libc.dylib 位于何处
- firebase - 向单个用户发送 Firebase 云消息
- ruby - `File.enum_for(:readlines, ...)` 未枚举
- excel - 修剪整个工作表中的单元格,溢出错误
- regex - 正则表达式 - 匹配特定字符串、起始值、结束值以及介于两者之间的所有内容