Swift 结构是可编码的,它意味着它的全部';s的属性是可编码的?
据我所知,如果一个结构是可编码的,那么该结构的所有属性都是可编码的。 我尝试对PKDrawing类型的对象进行编码(它是PencilKit中的一个结构),该类型是可编码的,因此没有问题:Swift 结构是可编码的,它意味着它的全部';s的属性是可编码的?,swift,codable,Swift,Codable,据我所知,如果一个结构是可编码的,那么该结构的所有属性都是可编码的。 我尝试对PKDrawing类型的对象进行编码(它是PencilKit中的一个结构),该类型是可编码的,因此没有问题: PKDrawing : Codable 然后我尝试用PKStroke类型对这个对象的一个属性进行编码 let drawing1JSON = try? JSONEncoder().encode(stroke) 但有一个错误“PKStroke需要符合可编码” 我误解了吗? 还有一种方法,我可以不用手动实现cod
PKDrawing : Codable
然后我尝试用PKStroke类型对这个对象的一个属性进行编码
let drawing1JSON = try? JSONEncoder().encode(stroke)
但有一个错误“PKStroke需要符合可编码”
我误解了吗?
还有一种方法,我可以不用手动实现codable来编码PKStroke?PKDrawing是否实现自己的CodingKeys枚举?正如我在PencilKit文件中看到的,没有CodingKeys枚举。PencilKit文件有542行代码。有一种方法可以查看更多代码引擎盖下是什么?@QuốcHuyNguyễ第二部分,是的。但第一部分并不完全正确。如果struct的所有属性都是可编码的,并且您将其与
codable
->一致,那么struct是可编码的。所有可编码的属性只允许编译器自动生成一个codable
实现,而无需编写所有样板代码。rommex扩展PKDrawing{public init(strokes:S),其中S:Sequence,S.Element==PKStroke public var strokes:[PKStroke]@QuốcHuyNguyễn是的,你是对的,但是如果你遵循PKDrawing的扩展列表,你会发现:扩展PKDrawing:Codable{…}
——这意味着PKDrawing实现了一个特殊的encode()
方法来遵守Codable
协议。这意味着PKStroke不必自动兼容。