Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 结构是可编码的,它意味着它的全部';s的属性是可编码的?_Swift_Codable - Fatal编程技术网

Swift 结构是可编码的,它意味着它的全部';s的属性是可编码的?

Swift 结构是可编码的,它意味着它的全部';s的属性是可编码的?,swift,codable,Swift,Codable,据我所知,如果一个结构是可编码的,那么该结构的所有属性都是可编码的。 我尝试对PKDrawing类型的对象进行编码(它是PencilKit中的一个结构),该类型是可编码的,因此没有问题: PKDrawing : Codable 然后我尝试用PKStroke类型对这个对象的一个属性进行编码 let drawing1JSON = try? JSONEncoder().encode(stroke) 但有一个错误“PKStroke需要符合可编码” 我误解了吗? 还有一种方法,我可以不用手动实现cod

据我所知,如果一个结构是可编码的,那么该结构的所有属性都是可编码的。 我尝试对PKDrawing类型的对象进行编码(它是PencilKit中的一个结构),该类型是可编码的,因此没有问题:

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不必自动兼容。