gpt4 book ai didi

ios - 初始化 CBCentralManager : Type of expression is ambiguous without more context

转载 作者:可可西里 更新时间:2023-11-01 01:08:01 26 4
gpt4 key购买 nike

尝试在 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 方面遗漏了一些重要的东西...

我可以在没有委托(delegate)的情况下使用管理器吗?如果不是,我需要做什么来解决错误?

最佳答案

此处的诊断具有误导性。问题是你不能在你所在的地方引用 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 之前根本不会创建它,因此使用 ! 版本更为常见特殊情况。

关于ios - 初始化 CBCentralManager : Type of expression is ambiguous without more context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53383490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com