투케이2K

15. (TWOK/UTIL) [Ios/Swift] S_Preference - 프리퍼런스 관리 클래스 본문

투케이2K 유틸파일

15. (TWOK/UTIL) [Ios/Swift] S_Preference - 프리퍼런스 관리 클래스

투케이2K 2022. 3. 24. 11:22

[설 명]

프로그램 : Ios / Swift

설 명 : 프리퍼런스 관리 클래스

 

[소스 코드]

 

import Foundation

class S_Preference {
    
    
    // MARK: - [클래스 설명]
    /*
    // -----------------------------------------
    1. UserDefaults 사용해 모바일 데이터 저장 클래스
    // -----------------------------------------
    2. UserDefaults : Key-Value 형태를 저장
    // -----------------------------------------
    3. UserDefaults : 앱이 종료되어도 값이 저장되지만, 앱이 삭제되면 저장된 데이터가 사라짐
    // -----------------------------------------
    4. UserDefaults : Int, Double, Float, String, Bool, Data 등 데이터 타입을 저장 실시
    // -----------------------------------------
    5. 저장된 전체 key 확인 : S_Preference().selectAllKey()
    // -----------------------------------------
    6. 전체 데이터 삭제 : S_Preference().removeAll()
    // -----------------------------------------
    7. String 저장 : S_Preference().setString(_sKey: "name", _sValue: "TWOK")
    // -----------------------------------------
    8. String 호출 : S_Preference().getString(_sKey: "name")
    // -----------------------------------------
    9. 참고 : 앱이 삭제되어도 데이터가 유지되길 원한다면 Core Data 혹은 KeyChain, NSKeyedArchiever등을 이용한 파일 형태로 저장하는 방법이 있습니다
    // -----------------------------------------
    */
    
    
    
    
    
    // MARK: - [빠른 로직 찾기 : 주석 로직 찾기]
    // -----------------------------------------
    // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
    // -----------------------------------------





    // MARK: - [클래스 이름 설정]
    let ACTIVITY_NAME = "S_Preference"
    
    
    
    
    
    // MARK: - [string 데이터 저장 실시]
    // [호출 방법 : S_Preference().setString(_sKey: "name", _sValue: "TWOK")]
    func setString(_sKey:String, _sValue:String) {
        UserDefaults.standard.set(_sValue, forKey: _sKey)
        UserDefaults.standard.synchronize() // 동기화 실시
        
        // 전체 key 데이터에 저장 실시
        var allData = UserDefaults.standard.string(forKey: "selectAllTwoK") ?? ""
        if allData.contains(_sKey) == false {
            allData = allData + " [\(_sKey)] "
            UserDefaults.standard.set(allData, forKey: "selectAllTwoK")
            UserDefaults.standard.synchronize() // 동기화 실시
        }
    }
    
    
    
    
    
    // MARK: - [string 데이터 호출 실시]
    // [호출 방법 : S_Preference().getString(_sKey: "name")]
    func getString(_sKey:String) -> String {
        let returnData = UserDefaults.standard.string(forKey: _sKey) ?? ""
        return returnData
    }
    
    
    
    
    
    // MARK: - [int 데이터 저장 실시]
    // [호출 방법 : S_Preference().setInt(_iKey: "age", _iValue: 28)]
    func setInt(_iKey:String, _iValue:Int) {
        UserDefaults.standard.set(_iValue, forKey: _iKey)
        UserDefaults.standard.synchronize() // 동기화 실시
        
        // 전체 key 데이터에 저장 실시
        var allData = UserDefaults.standard.string(forKey: "selectAllTwoK") ?? ""
        if allData.contains(_iKey) == false {
            allData = allData + " [\(_iKey)] "
            UserDefaults.standard.set(allData, forKey: "selectAllTwoK")
            UserDefaults.standard.synchronize() // 동기화 실시
        }
    }
    
    
    
    
    
    // MARK: - [int 데이터 호출 실시]
    // [호출 방법 : S_Preference().getInt(_iKey: "age")]
    func getInt(_iKey:String) -> Int {
        let returnData = UserDefaults.standard.integer(forKey: _iKey)
        return returnData
    }
    
    
    
    
    
    // MARK: - [Double 데이터 저장 실시]
    // [호출 방법 : S_Preference().setDouble(_dKey: "age", _dValue: 28.5)]
    func setDouble(_dKey:String, _dValue:Double) {
        UserDefaults.standard.set(_dValue, forKey: _dKey)
        UserDefaults.standard.synchronize() // 동기화 실시
        
        // 전체 key 데이터에 저장 실시
        var allData = UserDefaults.standard.string(forKey: "selectAllTwoK") ?? ""
        if allData.contains(_dKey) == false {
            allData = allData + " [\(_dKey)] "
            UserDefaults.standard.set(allData, forKey: "selectAllTwoK")
            UserDefaults.standard.synchronize() // 동기화 실시
        }
    }
    
    
    
    
    
    // MARK: - [Double 데이터 호출 실시]
    // [호출 방법 : S_Preference().getDouble(_dKey: "age")]
    func getDouble(_dKey:String) -> Double {
        let returnData = UserDefaults.standard.double(forKey: _dKey)
        return returnData
    }
    
    
    
    
    
    // MARK: - [Bool 데이터 저장 실시]
    // [호출 방법 : S_Preference().setBool(_bKey: "man", _bValue: true)]
    func setBool(_bKey:String, _bValue:Bool) {
        UserDefaults.standard.set(_bValue, forKey: _bKey)
        UserDefaults.standard.synchronize() // 동기화 실시
        
        // 전체 key 데이터에 저장 실시
        var allData = UserDefaults.standard.string(forKey: "selectAllTwoK") ?? ""
        if allData.contains(_bKey) == false {
            allData = allData + " [\(_bKey)] "
            UserDefaults.standard.set(allData, forKey: "selectAllTwoK")
            UserDefaults.standard.synchronize() // 동기화 실시
        }
    }
    
    
    
    
    
    // MARK: - [Bool 데이터 호출 실시]
    // [호출 방법 : S_Preference().getBool(_bKey: "age")]
    func getBool(_bKey:String) -> Bool {
        let returnData = UserDefaults.standard.bool(forKey: _bKey)
        return returnData
    }
    
    
    
    
    
    // MARK: - [특정 key 값 삭제 실시]
    func removeKey(_rkey:String){
        UserDefaults.standard.removeObject(forKey: _rkey)
        UserDefaults.standard.synchronize() // 동기화 실시
        
        // 전체 key 데이터에서 특정 key 삭제 실시
        var allData = UserDefaults.standard.string(forKey: "selectAllTwoK") ?? ""
        if allData.contains(_rkey) == true {
            allData = allData.replacingOccurrences(of: " [\(_rkey)] ", with: "")
            UserDefaults.standard.set(allData, forKey: "selectAllTwoK")
            UserDefaults.standard.synchronize() // 동기화 실시
        }
    }
    
    
    
    
    
    // MARK: - [저장된 전체 데이터 조회 실시]
    func selectAllKey() -> String{
        let returnData = UserDefaults.standard.string(forKey: "selectAllTwoK") ?? ""
        return returnData
    }
    
    
    
    
    
    // MARK: - [저장된 전체 데이터 초기화 실시]
    func removeAll(){
        for key in UserDefaults.standard.dictionaryRepresentation().keys {
            UserDefaults.standard.removeObject(forKey: key.description)
            UserDefaults.standard.synchronize() // 동기화 실시
        }
    }
    
    
    
    
    
    // MARK: - [인트로 화면 실행 시 초기화 해야하는 프리퍼런스 데이터 : A_Intro : viewDidLoad]
    func introCreateClear(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> introCreateClear() :: 인트로 화면 실행 시 프리퍼런스 데이터 초기화]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 푸시 알림 JS 전달]
        S_Preference().setString(_sKey: S_FinalData.PRE_ROOT_ACTIVITY, _sValue: "")
        // -----------------------------------------
        // [웹뷰 리로드 관련 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_WEBVIEW_RELOAD, _sValue: "")
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 및 백그라운드 전환 시간]
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_RESUME_TIME, _sValue: "")
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_PAUSE_TIME, _sValue: "")
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [앱 종료 시 초기화 해야하는 프리퍼런스 데이터 : A_Main : viewDidDisappear]
    func mainFinishClear(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> mainFinishClear() :: 앱 종료 시 프리퍼런스 데이터 초기화]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 푸시 알림 JS 전달]
        S_Preference().setString(_sKey: S_FinalData.PRE_ROOT_ACTIVITY, _sValue: "")
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [프로세스 시작 시 초기화 해야하는 프리퍼런스 데이터 : AppDelegate : didFinishLaunchingWithOptions]
    func proccessCreateClear(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> proccessCreateClear() :: 프로세스 시작 시 프리퍼런스 데이터 초기화]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
        // -----------------------------------------
        // [로그인 : 스키마 데이터 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_LOGIN, _sValue: "")
        // -----------------------------------------
        // [일반 : 스키마 데이터 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_CALL, _sValue: "")
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 푸시 알림 JS 전달]
        S_Preference().setString(_sKey: S_FinalData.PRE_ROOT_ACTIVITY, _sValue: "")
        // -----------------------------------------
        // [웹뷰 리로드 관련 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_WEBVIEW_RELOAD, _sValue: "")
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 및 백그라운드 전환 시간]
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_RESUME_TIME, _sValue: "")
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_PAUSE_TIME, _sValue: "")
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [프로세스 종료 시 초기화 해야하는 프리퍼런스 데이터 : AppDelegate : applicationWillTerminate]
    func proccessFinishClear(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> proccessFinishClear() :: 프로세스 종료 시 프리퍼런스 데이터 초기화]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
        // -----------------------------------------
        // [로그인 : 스키마 데이터 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_LOGIN, _sValue: "")
        // -----------------------------------------
        // [일반 : 스키마 데이터 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_CALL, _sValue: "")
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 푸시 알림 JS 전달]
        S_Preference().setString(_sKey: S_FinalData.PRE_ROOT_ACTIVITY, _sValue: "")
        // -----------------------------------------
        // [웹뷰 리로드 관련 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_WEBVIEW_RELOAD, _sValue: "")
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 및 백그라운드 전환 시간]
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_RESUME_TIME, _sValue: "")
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_PAUSE_TIME, _sValue: "")
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [프로세스 백그라운드 전환 시 프리퍼런스 초기화 : SceneDelegate : sceneWillResignActive]
    func proccessBackgroungClear(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> proccessBackgroungClear() :: 프로세스 백그라운드 전환 프리퍼런스 데이터 초기화]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
        // -----------------------------------------
    }
    
    
    
    
    
    // MARK: - [메인 웹뷰 리로드 시 초기화 데이터 : A_Main : onResume / SceneDelegate : sceneWillEnterForeground]
    func webViewReloadClear(){
        print("")
        print("====================================")
        print("[\(self.ACTIVITY_NAME) >> webViewReloadClear() :: 웹뷰 리로드 수행 프리퍼런스 데이터 초기화]")
        print("====================================")
        print("")
        
        // -----------------------------------------
        // [SEARCH FAST] : [프로세스 시작 및 종료 시 프리퍼런스 데이터 초기화]
        // -----------------------------------------
        // [로그인 : 스키마 데이터 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_LOGIN, _sValue: "")
        // -----------------------------------------
        // [일반 : 스키마 데이터 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_SCHEME_DATA_CALL, _sValue: "")
        // -----------------------------------------
        // [웹뷰 리로드 관련 초기화 실시]
        S_Preference().setString(_sKey: S_FinalData.PRE_WEBVIEW_RELOAD, _sValue: "")
        // -----------------------------------------
        // [메인 웹뷰 포그라운드 및 백그라운드 전환 시간]
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_RESUME_TIME, _sValue: "")
        S_Preference().setString(_sKey: S_FinalData.PRE_WV_PAUSE_TIME, _sValue: "")
        // -----------------------------------------
    }
    
    
} // [클래스 종료]

 

반응형
Comments