Swift Objective-C 中的协议扩展 class
Swift protocol extension in Objective-C class
我有一个用 Swift 编写的协议,应该由多个控制器遵守,其中一些是用 Objective-C 编写的。并非所有人都需要此 Swift 协议中的所有方法,因此起初我决定提供一些具有默认实现的方法来使它们成为 'optional' 但在这种情况下,我的 Objective-C 控制器无法识别我的 Swift 协议。有没有人遇到同样的情况并找到解决方案?我的一些代码示例:
@objc public protocol SwiftProtocol: AnyObject {
func requiredMethod()
func optionalMethod()
}
extension SwiftProtocol {
func optionalMethod() {}
}
@interface ObjClass ()<SwiftProtocol>
我遇到了错误:(59, 1) 找不到 'SomeProtocol' 的协议声明
在方法中使用 @objc public 而不是扩展会得到相同的结果。
TIA 为您提供帮助!
Objective-C 协议不能有默认实现。
Objective-C 协议可以有真正的可选 methods/properties,不像 Swift 协议只有必需的 methods/properties。 Swift 中的解决方法是使用默认实现,但是遗憾的是,在 Objective-C.
中看不到这些
我建议创建一个纯 Swift 协议,对于所有想要扩展它的 Objective-C 类,在 Swift 中写入一致性,然后创建 @objc
Swift 中调用默认协议实现的包装函数 - 如果需要调用,如果不需要调用,则忽略它。
大致如下:
protocol SwiftProtocol {
func requiredFunc()
func optionalFunc()
}
extension SwiftProtocol {
func optionalFunc() {}
}
@objc extension ObjcClass: SwiftProtocol {
@objc func requiredFunc() {
print("do something")
}
// This will call the default implementation - can be omitted if you don't need to call the default implementation from Objective-C
@objc func objc_optionalFunc() {
optionalFunc()
}
}
我有一个用 Swift 编写的协议,应该由多个控制器遵守,其中一些是用 Objective-C 编写的。并非所有人都需要此 Swift 协议中的所有方法,因此起初我决定提供一些具有默认实现的方法来使它们成为 'optional' 但在这种情况下,我的 Objective-C 控制器无法识别我的 Swift 协议。有没有人遇到同样的情况并找到解决方案?我的一些代码示例:
@objc public protocol SwiftProtocol: AnyObject {
func requiredMethod()
func optionalMethod()
}
extension SwiftProtocol {
func optionalMethod() {}
}
@interface ObjClass ()<SwiftProtocol>
我遇到了错误:(59, 1) 找不到 'SomeProtocol' 的协议声明 在方法中使用 @objc public 而不是扩展会得到相同的结果。 TIA 为您提供帮助!
Objective-C 协议不能有默认实现。
Objective-C 协议可以有真正的可选 methods/properties,不像 Swift 协议只有必需的 methods/properties。 Swift 中的解决方法是使用默认实现,但是遗憾的是,在 Objective-C.
中看不到这些我建议创建一个纯 Swift 协议,对于所有想要扩展它的 Objective-C 类,在 Swift 中写入一致性,然后创建 @objc
Swift 中调用默认协议实现的包装函数 - 如果需要调用,如果不需要调用,则忽略它。
大致如下:
protocol SwiftProtocol {
func requiredFunc()
func optionalFunc()
}
extension SwiftProtocol {
func optionalFunc() {}
}
@objc extension ObjcClass: SwiftProtocol {
@objc func requiredFunc() {
print("do something")
}
// This will call the default implementation - can be omitted if you don't need to call the default implementation from Objective-C
@objc func objc_optionalFunc() {
optionalFunc()
}
}