归档时:结构给出“冗余协议错误”,但在运行时没有

Posted

技术标签:

【中文标题】归档时:结构给出“冗余协议错误”,但在运行时没有【英文标题】:When archiving: A struct gives "Redundant protocol error", but not when running 【发布时间】:2019-05-03 19:04:02 【问题描述】:

我已将代码迁移到 Swift 4.2。当编译在设备上运行时,一切正常(编译并运行)。但是,当我尝试为 TestFlight 存档时,它给了我一个错误“'FormEncoding' 与协议'ParameterEncoding' 的冗余一致性”,其中只分配了一个协议

import Foundation
import Moya
import Alamofire

public struct FormEncoding: ParameterEncoding  // Error is here!

    public static var `default`: ParameterEncoding 
        return FormEncoding()
    

    public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest 
        ...
    

在错误窗格中,它只提到了对协议的单一一致性:

“‘FormEncoding’在这里声明符合协议‘ParameterEncoding’”

我可以想象存档/发布的构建设置是不同的,并且包括一些额外的优化/检查。但我在这里没有看到实际错误。

如果有任何解决方法的建议,将不胜感激。

【问题讨论】:

【参考方案1】:

看起来这是因为 Moya 和 Alamofire 之间的冲突。 Moya 重新定义(typealias)ParameterEncoding:

public typealias ParameterEncoding = Alamofire.ParameterEncoding

所以如果我注释掉

import Foundation
//import Moya
import Alamofire

然后它工作(档案)

【讨论】:

【参考方案2】:

您也可以通过使用以下方式明确引用 Alamofire 的协议来解决此问题:public struct FormEncoding: Alamofire.ParameterEncoding ...

【讨论】:

以上是关于归档时:结构给出“冗余协议错误”,但在运行时没有的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow 示例在 colab 上运行良好,但在 jupyter lab 上运行时给出了 nan

IIS7 中的 ***Exception 但在 Cassini 中没有

归档发布时,通过桥接头暴露的 Objective-c 类在 swift 中不可见

获取应用程序运行时归档时 dSYM 具有的 UUID

脚本在手动运行时完全运行,但在从另一个脚本运行时会丢失命令

存储过程有效,但在 c# 中给出无效列