核心蓝牙将中央委托设置为另一个视图控制器



我刚刚开始将我的应用程序转换为 Swift,我希望将 CBCentralManager.delegate 设置为另一个视图控制器(导航控制器推送到的视图控制器)。

我正在尝试使用以下代码执行相同的操作:

let viewCont = self.storyboard!.instantiateViewControllerWithIdentifier("mainView")
self.navigationController?.pushViewController(viewCont, animated: true)
manager.delegate = viewCont

变量管理器是 CBCentralManager 的一个实例,将委托设置为 viewCont 会引发以下错误:

"Cannot assign value of type 'UIViewController' to type 'CBCentralManagerDelegate?'"

视图控制器的声明:

class MainViewController: UIViewController, CBCentralManagerDelegate

我怎样才能解决同样的问题?

您需要向下转换从 instantiateViewControllerWithIdentifier 收到的视图控制器。 如果没有向下的投射,编译器只知道你有一个UIViewController

let viewCont = self.storyboard!.instantiateViewControllerWithIdentifier("mainView") as! MainViewController
self.navigationController?.pushViewController(viewCont, animated: true)
manager.delegate = viewCont

一旦你使用 as! 进行了向下转换,那么编译器就知道它有一个MainViewController并且由于这个类也是一个CBCentralManagerDelegate它很高兴。

最新更新