我正在開發一個簡單的音樂音序器應用程序。這種應用程序往往有一個複雜的數據結構,必須保存/加載,因此在Swift4中引入Codable
協議對我來說完全是一個好消息。Swift4 Condable:不能排除一個屬性
我的問題是這樣的: 我必須有一個非Codable屬性。它不必被編碼,因爲它是一個只在應用程序處於活動狀態時保持活動狀態的臨時變量。 所以我試圖通過執行CodingKey
來排除,但編譯器仍然給我錯誤「Type'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,你的代碼編譯沒有問題,可以解碼從/編碼到JSON數據沒有「musicSequence」。如果您嘗試使用較舊的測試版,則可能是較舊的測試版的一個缺陷。如果您使用beta 5測試了您的代碼並獲取了您描述的錯誤,則其他部分可能會受到影響,因此您需要展示更多上下文才能重現問題。請檢查。 – OOPer
我發現我還在使用beta3。它用beta5編譯!謝謝 –