gpt4 book ai didi

ios - 如何在 swift3 中为覆盖方法定义选择器

转载 作者:行者123 更新时间:2023-11-28 16:14:50 25 4
gpt4 key购买 nike

我想在CBPeripheralDelegate中定义一个选择器,它是func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?)

在swift3中,重命名为peripheral(_: didUpdateValueFor:error),与func peripheral(peripheral: CBPeripheral, didUpdateValueForDescriptor descriptor: CBDescriptor, error: NSError) 相同?)

所以当我尝试定义这样的选择器时 #selector(CBPeripheralDelegate.peripheral(_:didUpdateValueFor:error:)) 会导致编译错误:ambiguous use .

我试着定义 doc描述:#selector(((CBPeripheralDelegate.peripheral(_:didUpdateValueFor:error:)) as (CBPeripheralDelegate) -> (CBPeripheral, CBCharacteristic, NSError) -> Void),都失败了。

那么在 swift3 中定义选择器的正确方法是什么?

最佳答案

恐怕这可能是当前 #selector 表示法中的一个缺陷,您应该向 Apple 发送错误报告或 swift.org . (或者我可能只是遗漏了一些东西......)

要解决这个问题,请定义一个符合协议(protocol)的类,并定义您要为其创建选择器的方法。

class TheClass: NSObject, CBPeripheralDelegate {
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
//No need to actually implement the method
}
}

并在您的 #selector() 中使用该类名:

#selector(TheClass.peripheral(_:didUpdateValueFor:error:))

您可能已经有一个实现该方法的类,那么您可以使用它的类名。

Objective-C 选择器不保留类名信息,因此,选择器可用于可能实现该方法的任何类。

如果你想从一个符合协议(protocol)并有方法定义的类中创建一个选择器,你可以把它写成:

#selector(peripheral(_:didUpdateValueFor:error:))

关于ios - 如何在 swift3 中为覆盖方法定义选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39221563/

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