[ios] Swift에서 UserDefaults를 어떻게 사용할 수 있습니까?

UserDefaults를 사용하여 Swift에서 문자열, 부울 및 기타 데이터를 저장 / 검색하려면 어떻게해야합니까?



답변

ref : NSUserdefault objectTypes

Swift 3 이상

저장

UserDefaults.standard.set(true, forKey: "Key") //Bool
UserDefaults.standard.set(1, forKey: "Key")  //Integer
UserDefaults.standard.set("TEST", forKey: "Key") //setObject

검색

 UserDefaults.standard.bool(forKey: "Key")
 UserDefaults.standard.integer(forKey: "Key")
 UserDefaults.standard.string(forKey: "Key")

없애다

 UserDefaults.standard.removeObject(forKey: "Key")

모든 키 제거

 if let appDomain = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: appDomain)
 }

Swift 2 이하

저장

NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "yourkey")
NSUserDefaults.standardUserDefaults().synchronize()

검색

  var returnValue: [NSString]? = NSUserDefaults.standardUserDefaults().objectForKey("yourkey") as? [NSString]

없애다

 NSUserDefaults.standardUserDefaults().removeObjectForKey("yourkey")


레지스터

registerDefaults : 모든 검색 목록의 마지막 항목에 registrationDictionary를 추가합니다. 즉, NSUserDefaults가 다른 모든 유효한 위치에서 값을 찾은 후에 등록 된 기본값을 검색하여 “대체”값으로 유용하게 만듭니다. 등록 된 기본값은 응용 프로그램 실행 사이에 저장되지 않으며이를 등록하는 응용 프로그램에만 표시됩니다.

기본값 구성 파일의 기본값이 자동으로 등록됩니다.

예를 들어 launch에서 앱을 감지하고 저장 시작을위한 구조체를 만듭니다.

struct DetectLaunch {
static let keyforLaunch = "validateFirstlunch"
static var isFirst: Bool {
    get {
        return UserDefaults.standard.bool(forKey: keyforLaunch)
    }
    set {
        UserDefaults.standard.set(newValue, forKey: keyforLaunch)
    }
}
}

앱 시작시 기본값 등록 :

UserDefaults.standard.register(defaults: [
        DetectLaunch.isFirst: true
    ])

앱 종료시 값을 제거하십시오.

func applicationWillTerminate(_ application: UIApplication) {
    DetectLaunch.isFirst = false

}

상태를 다음과 같이 확인하십시오.

if DetectLaunch.isFirst {
  // app launched from first
}

UserDefaults 제품군 이름

다른 하나의 속성 모음 이름 은 주로 앱 그룹 개념에 사용 되며 여기 에서 가져온 예제 시나리오입니다 .

사용 사례는 Android의 SharedPreferences와 같은 식별자로 UserDefaults (다른 비즈니스 로직에 따라 Userdefaults를 별도로 그룹화해야 할 수 있음)를 구분하려는 것입니다. 예를 들어 내 앱의 사용자가 로그 아웃 버튼을 클릭 할 때 기기 위치가 아닌 계정 관련 기본값을 지우고 싶습니다.

let user = UserDefaults(suiteName:"User")

userDefaults sync 사용 하면 중복 답변에 세부 정보가 추가되었습니다.


답변

UserDefaults 를 사용하는 가장 좋은 방법

단계

  1. UserDefaults 확장 만들기
  2. 로컬에 저장할 필수 키로 열거 형 만들기
  3. 원하는 곳에서 로컬 데이터 저장 및 검색

견본

extension UserDefaults{

    //MARK: Check Login
    func setLoggedIn(value: Bool) {
        set(value, forKey: UserDefaultsKeys.isLoggedIn.rawValue)
        //synchronize()
    }

    func isLoggedIn()-> Bool {
        return bool(forKey: UserDefaultsKeys.isLoggedIn.rawValue)
    }

    //MARK: Save User Data
    func setUserID(value: Int){
        set(value, forKey: UserDefaultsKeys.userID.rawValue)
        //synchronize()
    }

    //MARK: Retrieve User Data
    func getUserID() -> Int{
        return integer(forKey: UserDefaultsKeys.userID.rawValue)
    }
}

데이터 저장에 사용되는 키 열거 형

enum UserDefaultsKeys : String {
    case isLoggedIn
    case userID
}

원하는 곳에 UserDefaults에 저장

UserDefaults.standard.setLoggedIn(value: true)          // String
UserDefaults.standard.setUserID(value: result.User.id!) // String

앱 어디에서나 데이터 검색

print("ID : \(UserDefaults.standard.getUserID())")
UserDefaults.standard.getUserID()

값 제거

UserDefaults.standard.removeObject(forKey: UserDefaultsKeys.userID) 

이렇게하면 원시 데이터를 최상의 상태로 저장할 수 있습니다.

업데이트
값을 저장하기 위해 동기화 ()를 사용할 필요가 없습니다. @Moritz가 불필요하다고 지적하고 이에 대한 기사를 제공 했으므로 자세한 내용은 의견을 확인하십시오.


답변

스위프트 4 :

저장

    UserDefaults.standard.set(object/value, forKey: "key_name")

검색

    var returnValue: [datatype]? = UserDefaults.standard.object(forKey: "key_name") as? [datatype]

없애다

    UserDefaults.standard.removeObject(forKey:"key_name") 


답변

//Save
NSUserDefaults.standardUserDefaults().setObject("yourString", forKey: "YourStringKey")

//retrive
let yourStr : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YourStringKey")


답변

NSUserDefaults이런 식으로 신속하게 사용할 수 있습니다 .

@IBAction func writeButton(sender: UIButton)
{
    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.setObject("defaultvalue", forKey: "userNameKey")

}

@IBAction func readButton(sender: UIButton)
{
    let defaults = NSUserDefaults.standardUserDefaults()
    let name = defaults.stringForKey("userNameKey")
    println(name) //Prints defaultvalue in console
}


답변

Swift 5 이상 :

let defaults = UserDefaults.standard

defaults.set(25, forKey: "Age")
let savedInteger = defaults.integer(forKey: "Age")

defaults.set(true, forKey: "UseFaceID")
let savedBoolean = defaults.bool(forKey: "UseFaceID")

defaults.set(CGFloat.pi, forKey: "Pi")
defaults.set("Your Name", forKey: "Name")
defaults.set(Date(), forKey: "LastRun")


let array = ["Hello", "World"]
defaults.set(array, forKey: "SavedArray")


let savedArray = defaults.object(forKey: "SavedArray") as? [String] ?? [String()

let dict = ["Name": "Your", "Country": "YourCountry"]
defaults.set(dict, forKey: "SavedDict")

let savedDictionary = defaults.object(forKey: "SavedDictionary") as? [String: String] ?? [String: String]()

🙂


답변

NSDictionary를 정상적으로 저장하고 올바르게 가져올 수 있습니다.

 dictForaddress = placemark.addressDictionary! as NSDictionary
        let userDefaults = UserDefaults.standard
        userDefaults.set(dictForaddress, forKey:Constants.kAddressOfUser)

// NSDictionary에서 데이터를 가져옵니다.

let userDefaults = UserDefaults.standard
    let dictAddress = userDefaults.object(forKey: Constants.kAddressOfUser) as! NSDictionary