【发布时间】:2017-08-07 23:52:41
【问题描述】:
我正在开发一个简单的音乐音序器应用程序。这种应用程序往往具有复杂的数据结构,必须保存/加载,所以在 Swift4 中引入Codable 协议对我来说完全是一个好消息。
我的问题是:
我必须有一个不可编码的属性。它不必编码,因为它是一个临时变量,仅在应用程序处于活动状态时才保持活动状态。
所以我刚刚尝试通过实现CodingKey 来排除,但编译器仍然给我错误“类型'Song'不符合协议'Decodable'”。
具体来说,我想在下面的代码中排除“musicSequence”。
class Song : Codable { //Type 'Song' does not conform to protocol 'Decodable'
var songName : String = "";
var tempo : Double = 120;
// Musical structure
var tracks : [Track] = [] // "Track" is my custom class, which conforms Codable as well
// Tones
var tones = [Int : ToneSettings] (); // ToneSettings is also my custom Codable class
var musicSequence : MusicSequence? = nil; // I get the error because of this line
private enum CodingKeys: String, CodingKey {
case songName
case tempo
case tracks
case tones
}
func createMIDISequence () {
// Create MIDI sequence based on "tracks" above
// and keep it as instance variable "musicSequence"
}
}
有人有什么想法吗?
【问题讨论】:
-
据我在 Xcode 9 beta 5 上测试,您的代码编译没有问题,并且可以在没有“musicSequence”的情况下从/编码到 JSON 数据。如果您尝试使用较旧的测试版,则可能是较旧的测试版的错误。如果您使用 beta 5 测试您的代码并得到您描述的错误,则其他一些部分可能会影响,因此您需要显示更多上下文来重现该问题。请检查。
-
我发现我还在使用 beta3。它是用 beta5 编译的!谢谢