swift入門から放棄へ-情報格納(3)
2495 ワード
extension UserDefaults {
enum user: String,UserDefaultsProtocol {
case name
case age
case nick
case mobile
case id
}
}
プロトコルでは、変数uniqueKeyを定義、格納する値に一意のkeyを設定し、格納および値の取得方法を提供する.
public protocol UserDefaultsProtocol {
var uniqueKey: String{get}
}
extension UserDefaultsProtocol where Self:RawRepresentable,Self.RawValue == String{
///Any
func store(value: Any?) {
UserDefaults.standard.setValue(value, forKey: uniqueKey)
}
var value: Any? {
return UserDefaults.standard.value(forKey: uniqueKey)
}
var stringValue: String? {
return value as? String
}
///URL
func store(url: URL?) {
UserDefaults.standard.set(url, forKey: uniqueKey)
}
var urlValue: URL? {
return UserDefaults.standard.url(forKey: uniqueKey)
}
///BOOL
func store(value: Bool) {
UserDefaults.standard.set(value, forKey: uniqueKey)
}
var boolValue: Bool {
return UserDefaults.standard.bool(forKey: uniqueKey)
}
// key
var uniqueKey: String {
return"\(Self.self).\(rawValue)"
}
//Delete
func remove() {
UserDefaults.standard.removeObject(forKey: uniqueKey)
}
}
user管理クラスにおいてプロトコルで提供する方法によりアクセスが容易になり、開発がより容易になる.
class JINUser: NSObject {
static let instance = JINUser()
private override init() {
Name = UserDefaults.user.name.stringValue ?? ""
Age = UserDefaults.user.age.stringValue ?? ""
Nick = UserDefaults.user.nick.stringValue ?? ""
Id = UserDefaults.user.id.stringValue ?? ""
Mobile = UserDefaults.user.mobile.stringValue ?? ""
}
var Name: String?{
didSet{
UserDefaults.user.name.store(value: Name)
}
}
var Age: String?{
didSet{
UserDefaults.user.age.store(value: Age)
}
}
var Nick: String?{
didSet{
UserDefaults.user.nick.store(value: Nick)
}
}
var Id: String?{
didSet{
UserDefaults.user.id.store(value: Id)
}
}
var Mobile: String?{
didSet{
UserDefaults.user.mobile.store(value: Mobile)
}
}
}