CoreBluetooth 将中央委托设置为另一个视图控制器
CoreBluetooth set central delegate to another view controller
我刚刚开始将我的应用程序翻译成 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
并且因为这个 class 也是一个 CBCentralManagerDelegate
它很高兴。
我刚刚开始将我的应用程序翻译成 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
并且因为这个 class 也是一个 CBCentralManagerDelegate
它很高兴。