【发布时间】:2014-12-27 04:40:40
【问题描述】:
这是我创建的自定义类:
import UIKit
import CoreBluetooth
protocol vaBeanDelegate
{
}
class vaBean: CBCentralManager, CBCentralManagerDelegate {
override init!(delegate: CBCentralManagerDelegate!, queue: dispatch_queue_t!) {
println("bean initialised")
super.init()
self.delegate = delegate
}
func centralManager(central: CBCentralManager!, didDiscoverPeripheral peripheral: CBPeripheral!, advertisementData: [NSObject : AnyObject]!, RSSI: NSNumber!) {
println("discovered peripheral(s)")
}
func centralManagerDidUpdateState(central: CBCentralManager!) {
switch (central.state) {
case .PoweredOff:
println("hardware is powered off")
case .PoweredOn:
println("hardware is powered on and ready")
//centralManager.scanForPeripheralsWithServices(nil, options: nil)
case .Resetting:
println("hardware is resetting")
case .Unauthorized:
println("state is unauthorized")
case .Unknown:
println("state is unknown");
case .Unsupported:
println("hardware is unsupported on this platform");
}
}
func centralManager(central: CBCentralManager!, didConnectPeripheral peripheral: CBPeripheral!) {
println("didConnectPeripheral")
}
}
我只是不知道如何从我的主 ViewController 初始化它。当我尝试以下操作时,它抱怨 ViewController 不符合 CBCentralManagerDelegate:
import UIKit
class ViewController: UIViewController {
var myBean: vaBean!
override func viewDidLoad() {
super.viewDidLoad()
println("blueToothTest v1.00")
println("opening bluetooth connection ...")
myBean = vaBean(delegate: self, queue: nil)
}
override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()}
}
【问题讨论】:
-
这是因为在 Swift 中不能有多重继承。您可以拥有任意数量的协议,但只能拥有一个超类。
-
当你写
vaBean(delegate: self, queue: nil)时,self指的是ViewController,它不能作为一个委托,因为它不符合委托协议。我认为您最好的选择是将自定义初始化程序更改为仅采用queue参数,并将其设置为self.delegate = self- 在初始化程序的上下文中,self将引用您的 vaBean 实例,这就是您的想要。 -
谢谢托德,感激不尽。
标签: ios inheritance swift compiler-errors