bestsource

Swift에서 UserDefaults를 사용하려면 어떻게 해야 합니까?

bestsource 2023. 4. 14. 21:56
반응형

Swift에서 UserDefaults를 사용하려면 어떻게 해야 합니까?

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

참조: NSUserdefault 객체종류

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가 다른 모든 유효한 위치에서 값을 검색한 후 등록된 기본값을 검색하여 "폴백" 값으로 유용함을 의미합니다.등록된 기본값은 응용 프로그램 실행 사이에 저장되지 않으며 이를 등록하는 응용 프로그램에만 표시됩니다.

[ Defaults Configuration Files ]의 디폴트값이 자동적으로 등록됩니다.

예를 들어 시작부터 앱을 감지하고 시작 시 저장 구조를 만듭니다.

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 스위트 이름

다른 하나의 속성 스위트 이름은 대부분 App Groups 개념에 사용됩니다.여기서 얻은 시나리오 예:

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

let user = UserDefaults(suiteName:"User")

userDefaults synchronize사용하면 중복 응답에 상세 정보가 추가되었습니다.

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) 

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

업데이트 값을 저장하기 위해 synchronize()를 사용할 필요가 없습니다.@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") 

User Default +Helper.swift

import UIKit

private enum Defaults: String {
   case countryCode = "countryCode"
   case userloginId   = "userloginid"
}

final class UserDefaultHelper {

static var countryCode: String? {
    set{
        _set(value: newValue, key: .countryCode)
    } get {
        return _get(valueForKay: .countryCode) as? String ?? ""
    }
}

static var userloginId: String? {
    set{
        _set(value: newValue, key: .userloginId)
    } get {
        return _get(valueForKay: .userloginId) as? String ?? ""
    }
}

private static func _set(value: Any?, key: Defaults) {
    UserDefaults.standard.set(value, forKey: key.rawValue)
}

private static func _get(valueForKay key: Defaults)-> Any? {
    return UserDefaults.standard.value(forKey: key.rawValue)
}

static func deleteCountryCode() {
    UserDefaults.standard.removeObject(forKey: Defaults.countryCode.rawValue)
 }

static func deleteUserLoginId() {
    UserDefaults.standard.removeObject(forKey: Defaults.userloginId.rawValue)
 }
}

사용방법:

가치 저장:

UserDefaultHelper.userloginId = data["user_id"] as? String

값 가져오기:

let userloginid = UserDefaultHelper.userloginId

값 삭제:

UserDefaultHelper.deleteUserLoginId()

Anbu의 답변은 완벽하다고 할 수 있지만, 프로그램이 실패하지 않도록 하기 위해 기본 설정을 구하면서 가드를 추가해야 했습니다.

다음은 Swift 5의 업데이트된 코드 캡처입니다.

UserDefaults에 데이터 저장

@IBAction func savePreferenceData(_ sender: Any) {
        print("Storing data..")
        UserDefaults.standard.set("RDC", forKey: "UserName") //String
        UserDefaults.standard.set("TestPass", forKey: "Passowrd")  //String
        UserDefaults.standard.set(21, forKey: "Age")  //Integer

    }

UserDefaults에서 데이터 가져오기

    @IBAction func fetchPreferenceData(_ sender: Any) {
        print("Fetching data..")

        //added guard
        guard let uName = UserDefaults.standard.string(forKey: "UserName") else { return }
        print("User Name is :"+uName)
        print(UserDefaults.standard.integer(forKey: "Age"))
    }
//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

사용자 정의에서 데이터를 저장하기 위한 사용자 지정 함수를 만들었습니다.

 //******************* REMOVE NSUSER DEFAULT *******************
 func removeUserDefault(key:String) {
  UserDefaults.standard.removeObject(forKey: key);
 }

 //******************* SAVE STRING IN USER DEFAULT *******************
 func saveInDefault(value:Any,key:String) {
  UserDefaults.standard.setValue(value, forKey: key);
  UserDefaults.standard.synchronize();
 }


//******************* FETCH STRING FROM USER DEFAULT *******************
func fetchString(key:String)->AnyObject {
if (UserDefaults.standard.object(forKey: key) != nil) {
    return UserDefaults.standard.value(forKey: key)! as AnyObject;
}
 else {
    return "" as AnyObject;
}
 }
class UserDefaults_FavoriteQuote {
    static let key = "appname.favoriteQuote"

    static var value: String? {
        get {
            return UserDefaults.standard.string(forKey: key)
        }
        set {
            if newValue != nil {
                UserDefaults.standard.set(newValue, forKey: key)
            } else {
                UserDefaults.standard.removeObject(forKey: key)
            }
        }
    }
}

★★★A, 키의 값을 설정합니다.

let text = "hai"  
UserDefaults.standard.setValue(text, forKey: "textValue")

★★★B키 「반드시」를해 텍스트의 값을 취득합니다.A필요한 각 변수에 할당합니다.

var valueOfText  = UserDefaults.value(forKey: "textValue")

Swift 4, User Defaults 처리에 Enum을 사용했습니다.

이것은 샘플 코드입니다.요건에 따라 커스터마이즈 할 수 있습니다.

저장, 검색, 삭제의 경우.이 방법으로 UserDefaults 키 키를 열거형에 추가합니다.데이터 유형 및 요구 사항에 따라 값을 가져오고 저장하면서 처리하십시오.

enum UserDefaultsConstant : String {
    case AuthToken, FcmToken

    static let defaults = UserDefaults.standard


   //Store
    func setValue(value : Any) {
        switch self {
        case .AuthToken,.FcmToken:
            if let _ = value as? String {
                UserDefaults.standard.set(value, forKey: self.rawValue)
            }
            break
        }

        UserDefaults.standard.synchronize()
    }

   //Retrieve
    func getValue() -> Any? {
        switch self {
        case .AuthToken:
            if(UserDefaults.standard.value(forKey: UserDefaultsConstant.AuthToken.rawValue) != nil) {

                return "Bearer "+(UserDefaults.standard.value(forKey: UserDefaultsConstant.AuthToken.rawValue) as! String)
            }
            else {
                return ""
            }

        case .FcmToken:

            if(UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue) != nil) {
                print(UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue))
                return (UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue) as! String)
            }
            else {
                return ""
            }
        }
    }

    //Remove
    func removeValue() {
        UserDefaults.standard.removeObject(forKey: self.rawValue)
        UserDefaults.standard.synchronize()
    }
}

userdefaults에 값을 저장하는 경우

if let authToken = resp.data?.token {
     UserDefaultsConstant.AuthToken.setValue(value: authToken)
    }

userdefaults에서 값을 가져오려면

//As AuthToken value is a string
    (UserDefaultsConstant.AuthToken.getValue() as! String)

UserDefault를 사용하여 응용 프로그램이 시작 사이에 기억하도록 설정 값을 저장합니다. 예를 들어 시작 전에 시작되었는지 알고 싶을 수도 있습니다. 사용자가 기억하도록 설정한 값 중 일부를 기억하고 싶을 수도 있습니다. Mac Windows에서는 프레임이 저장됩니다.앱의 동작을 제어하고 싶을지도 모르지만, 최종 사용자가 사용할 수 있는 것을 원하지 않고, 단지 출시 직전에 선택하고 싶을 뿐입니다.UserDefaults에 저장하는 것은 보호되지 않으므로 주의하십시오.

언급URL : https://stackoverflow.com/questions/31203241/how-can-i-use-userdefaults-in-swift

반응형