Now, support Swift 5.1, and you can use by PropertyWrapper
SwiftUserDefault, which is just wrap NSUserDefaults, make you easy to use.
struct TestUserDefault {
@UserDefaultsItem("objectTest") static var objectTest: AnyObject
@UserDefaultsItem("stringTest") static var stringTest: String
@UserDefaultsItem("boolTest") static var boolTest: Bool
@UserDefaultsItem("intTest") static var intTest: Int
@UserDefaultsItem("floatTest") static var floatTest: Float
@UserDefaultsItem("doubleTest") static var doubleTest: Double
@UserDefaultsItem("dataTest") static var dataTest: Data
@UserDefaultsItem("dateTest") static var dateTest: Date
@UserDefaultsItem("[Bool]") static var boolArrayTest: [Bool]
@UserDefaultsItem("[Int]") static var intArrayTest: [Int]
@UserDefaultsItem("[String]") static var stringArrayTest: [String]
@UserDefaultsItem("[Data]") static var dataArrayTest: [Data]
@UserDefaultsItem("<String : Int>") static var dictIntTest: [String : Int]
@UserDefaultsItem("<String : String>") static var dictStringTest: [String : String]
@UserDefaultsItem("<String : Date>") static var dictDateTest: [String : Date]
@UserDefaultsItem("<String : Bool>") static var dictBoolTest: [String : Bool]
}
In your project, use can declear your store type, like above, UserDefaultsItem would synchronize it once you set newValue, if newValue is nil, the key's value would be remove from NSUserDefaults.
set value
TestUserDefault.stringTest = "I'am test"
get value
let value = TestUserDefault.stringTest // will be optional value "I'am test"
By CocoaPods use:
pod SwiftUserDefault