CoreData 가기전에 영구적인 데이터를 보존하는 가장쉬운방법인 UserDefault를 한번 살펴보고 가겠다 크키가 작은 데이터의 경우 Xcode폴더에 영구적으로 보관하는방식이 쉽다보니 UserDefault방식을 선호하고 이것을 DB로 쓰는 사람도 종종 있다고한다..
// Xcode에 저장된 UserDefault 데이터 경로확인법, Key,Value 형식으로 저장되있는 plist을 확인할수있다
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as String)
경로 ex) /Users/david/Library/Developer/CoreSimulator/Devices/365092AC-CBE3-4AB4-A77E-A08A7B8AB76C/data/Containers/Data/Application/DEB6640B-B903-44D3-BBB7-3F6D8F9E5B23/Library/Preferenc
위의 폴더를 열어보면 BundleID 생성된 plist파일을 확인할수있다...
let defaults = UserDefaults.standard
defaults.set(0.24, forKey: "Volume")
defaults.set(true, forKey:"MusicOn")
defaults.set("Angela", forKey:"PlayerName")
defaults.set(Date(), forKey:"AppLastOpenedByUser")
let array = [1, 2, 3]
defaults.set(array, forKey: "myArray")
let dictionary = ["Name": "Angela"]
defaults.set(dictionary, forKey: "myDictionary")
let volume = defaults.float(forKey: "Volume")
let appLastOpen = defaults.object(forKey: "AppLastOpenedByUser")
let myArray = defaults.array(forKey: "myArray") as! [Int]
let myDictionaory = defaults.dictionary(forKey: "myDictionary")
// Singleton -> 클래스변수,클래스메소드와 비슷한개념 Instance와 다르게 클래스밖으로 나가서 사용가능하며 값을 바꾸면 사용하는 어느클래스에서도 값이 바뀐다 static 키워드를 사용하면된다...
class Car {
var colur = "Red"
}
let myCar = Car()
myCar.colur = "Blue"
let yourCar = Car()
print(yourCar.colur)
class Bus {
var colur = "Red"
static let singletonBus = Bus()
}
let myBus = Bus.singletonBus
myBus.colur = "Blue"
let yourBus = Bus.singletonBus
print(yourBus.colur)
class A {
init() {
Bus.singletonBus.colur = "Yellow"
}
}
class B {
init() {
print(Bus.singletonBus.colur)
}
}
let testA = A()
let testB = B()
// Yellow가 출력된다
UserDefault 사용하면 Key값을 가지고 접근하여서 Primitiv한 데이터셋을 전부 저장가능하다 그리고 UserDefault Property타입은 Singleton이라 하고 API 통신떄쓰는 URLSession 같은 타입이다
추후에는 UserDefault를 사용하여 여러가지 데이터를 영구적으로 가져야하는 코드를 작성해봐야겟다...