3

对于在多个文件中可编码的属性包装器,编译失败。

我在下面的 Swift 源代码中找到了测试代码:

@propertyWrapper
struct Printed<Value: Codable>: Codable {
    var wrappedValue: Value {
        didSet { print(wrappedValue) }
    }
}

struct Foo: Codable {
    @Printed var bar: Bool = false
}
func test(_ value: Foo = Foo()) {
  let _: Codable = value
}

并在我的测试项目中使用它们:

测试项目

但是编译失败并出现错误:

Type 'Foo' does not conform to protocol 'Encodable'

如何解决?

4

3 回答 3

1

这是一个可见性问题...最简单的解决方法是将这些辅助结构移动到ViewController模块中,如下所示...运行,一切正常(使用 Xcode 11.2 测试)

在此处输入图像描述

于 2020-01-25T19:07:21.323 回答
0

如果这是该功能的唯一要求,则允许test接受泛型:Codable

func test<T: Codable>(_ value: T) {
    let val = value
}
于 2020-01-27T10:38:27.823 回答
0

测试 Foo 结构不必是可编码的。

测试是在bar财产上。并且 Bool 类型已经适应 Codable。

struct Foo{
    @Printed var bar: Bool = false
}

func test(_ value: Foo = Foo()) {
   var m = value
   m.bar = true. // will call didSet in @printed struct
}
于 2019-10-28T05:03:47.250 回答