在Framework1中,我有以下代码:
public protocol SomeProtocol{
func doSomething()
}
extension SomeProtocol where Self : UIButton{
public func doSomething(){}
}
在Framework2中,它将Framework1作为Cocoa pod导入,我像这样添加了对SomeProtocol的一致性
extension UIButton : SomeProtocol{}
Framework1构建成功,但是,在构建Framework2时收到以下Apple Mach-O链接器错误:
架构x86_64的未定义符号:"(扩展名为 Framework1):Framework1.SomeProtocol.doSomething() - > ()",引自: Framework1.SomeProtocol.doSomething()的协议见证 - > ()符合__ObjC.UIButton:Framework1.SomeProtocol in SomeFile.o中的Framework2 ld:未找到架构的符号 x86_64 clang:错误:链接器命令失败,退出代码为1(使用-v to 见调用)
如果我将UIButton的协议一致性移动到Framework1文件中:
public protocol SomeProtocol{
func doSomething()
}
extension SomeProtocol where Self : UIButton{
public func doSomething(){}
}
extension UIButton : SomeProtocol{}
Framework1将成功构建。这对我不起作用,因为我需要在Framework2中建立UIButton与SomeProtocol的一致性而不是Framework1。
我目前的解决方案只是删除
extension SomeProtocol where Self : UIButton{
public func doSomething(){}
}
从Framework1 并在Framework2中的UIButton扩展中实现它,如下所示:
extension UIButton : SomeProtocol{
public func doSomething(){}
}
然而,这不是一个好的解决方案,因为我希望能够在任何使用Framework1的框架之间共享UIButton的doSomething实现。任何帮助将不胜感激!