は、あなた自身のアーカイバを書きます。
これは、関連付けられた値を持つ列挙型を、ユーザーのデフォルトで直接保存できるプロパティリスト表現(辞書)に変換し、列挙型に戻すことができます。
enum DeepLinkAction {
case StartPractice(lessonName:String)
case StartTest
case Letters(didComplete:Bool, iconURL:String)
var propertyListRepresentation : [String:AnyObject] {
switch self {
case .StartPractice(let lessonName) : return ["StartPractice" : lessonName]
case .StartTest : return ["StartTest" : ""]
case .Letters(let complete, let iconURL) : return ["Letters" : [complete, iconURL]]
}
}
init(propertyList: [String:AnyObject]) {
assert(!propertyList.isEmpty, "property list must contain one key")
let key = propertyList.keys.first!
let value = propertyList[key]!
switch key {
case "StartPractice": self = .StartPractice(lessonName: value as! String)
case "Letters":
let parameters = value as! [AnyObject]
self = .Letters(didComplete: parameters[0] as! Bool, iconURL: parameters[1] as! String)
default: self = .StartTest
}
}
}
let action = DeepLinkAction.Letters(didComplete: false, iconURL: "http://myServer.com/path")
let plist = action.propertyListRepresentation // ["Letters": [0, "http://myServer.com/path"]]
let action2 = DeepLinkAction(propertyList: plist)
ニース:)ありがとう、たくさん働いています – shannoga