用于体系结构的未定义符号:*扩展,其中Self:Protocol *引用自:protocol witness for * protocol.func *

时间:2017-04-25 21:14:55

标签: ios swift xcode swift-protocols protocol-extension

在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实现。任何帮助将不胜感激!

0 个答案:

没有答案