1
我想創建一個使用傳統多態性來代替藍牙LE,藍牙等設備的代理,並且似乎無法獲得鑄造的語法權限。使用Swift協議繼承
這裏是我的父母協議和類:
@objc protocol DeviceDelegate
{
func didConnectToDevice(name:String)
func didFailToConnectToDevice(name:String)
func didDisconnectFromDevice(name:String)
func didWriteData(data:NSData)
func didReceiveData(data:NSData)
}
class Device: NSObject
{
var delegate: DeviceDelegate?
}
現在這裏是子類和協議簡化了下來:
protocol BluetoothDelegate : DeviceDelegate
{
func didFindService(name:String)
func didFindCharacteristic(name:String)
}
class BLE: Device
{
func someFunc()
{
let bluetoothDelegate = (delegate as? BluetoothDelegate)
bluetoothDelegate.didFindService(UUIDString)
}
}
它輕視該函數的第一線以下錯誤:
Cannot downcast from 'DeviceDelegate?' to [email protected] protocol type 'BluetoothDelegate'
這對我來說沒有意義,因爲它應該允許鑄造成ac像通常的對象一樣。
如果我在BluetoothDelegate我碰到下面的錯誤面前放@objc:
@objc protocol 'BluetoothDelegate' cannot refine [email protected] protocol 'DeviceDelegate'
任何人對此有什麼想法?
我使用你的替代代碼,仍然得到相同的結果,但: 他們在兩個單獨的文件,因爲它們分別由父類和子類使用。我認爲這可能是一個編譯器錯誤,如果我將兩個協議移動到一個文件,然後編譯正確。 放在一邊,並在新發布的XCode 6.3 Beta 2中測試,它在2個獨立的文件中正常工作。 謝謝! – Khirok 2015-02-23 18:30:50