Swift 4.0 解码器错误与闭包属性

标签 swift serialization closures swift4 codable

我正在尝试使用 Swift 4.0 Codable 协议(protocol)序列化我的对象。我在尝试解码闭包属性时遇到错误:

guard let influenceFunction = try? container.decode(((E, Double) -> (E))!.self, forKey: TransformCodingKeys.influenceFunction) else {
    // ... do something clever ...
    print("sad times...")
}

Cannot invoke 'decode' with an argument list of type '(((E, Double) -> (E))!.Type, forKey: TransformCodingKeys)'

我想这是可以理解的,但肯定有一些我可以使用的策略(毕竟,函数是一流的对象,对吧?)。我必须以某种方式包装我的闭包吗?

最佳答案

你可以使用一个技巧来解决这个问题:

typealias YourCompletion = (_ status: Bool) -> Void
class Completion: Codable {
    var completion: YourCompletion?
    private enum CodingKeys: CodingKey {}
}

关于Swift 4.0 解码器错误与闭包属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45970903/

相关文章:

lambda - 为什么这个闭包需要内联或 `dyn` ? `dyn` 在这里做什么?

javascript - 如何在 javascript 闭包中将 'this' 保留在类中

WCF 使用消息协定序列化枚举

java - 定位复杂 Bean 中的序列化问题

ios - 在呈现的 UIViewController 后面的 UIViewController 之间进行分隔的最佳方法是什么

ios - 是否可以调整 Metal View (MTKView())的大小,使其高度延伸到整个屏幕,但与宽度的比例保持不变?

c++ - 在 C++ 中通过套接字发送 protobuf 的序列化是什么?

javascript - 我如何将两个函数放在一起,两个函数内部都有递归

swift - 以编程方式创建带有约束的 UILabel?

swift - 试图计算时差,但收到否定答案