【发布时间】:2017-08-30 22:56:57
【问题描述】:
我正在尝试使用 Swift 4.0 Codable 协议序列化我的对象。尝试解码闭包属性时遇到错误:
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)'
我想这很容易理解,但肯定有一些我可以使用的策略(毕竟,函数是一流的对象,对吧?)。我必须以某种方式包装我的闭包吗?
【问题讨论】:
-
你想解码什么?
(E, Double) -> (E)不符合Decodable,我看不出它如何用 JSON 等表示。 -
正如我所提到的,它是一个闭包......请注意,我还没有实现 encode(to:) ,这可能会使问题更加明显!哈!...我想我将不得不在我的 container.decode(from:) 调用之后手动设置这些闭包。应该没问题,因为它们基本上都是硬连线的。
-
顺便说一句,该类确实确保 E 是可编码的。问题是没有将闭包作为参数的重载......这是可以理解的,因为闭包将如何序列化并不明显,而且无论如何这可能不是一个好主意(安全方面)。 ..
标签: swift serialization closures swift4 codable