আমি সুইফটে স্ট্রিং, বুলিয়ান এবং অন্যান্য ডেটা সংরক্ষণ / পুনরুদ্ধার করতে কীভাবে ব্যবহারকারীর ডেফেল্টগুলি ব্যবহার করতে পারি?
আমি সুইফটে স্ট্রিং, বুলিয়ান এবং অন্যান্য ডেটা সংরক্ষণ / পুনরুদ্ধার করতে কীভাবে ব্যবহারকারীর ডেফেল্টগুলি ব্যবহার করতে পারি?
উত্তর:
রেফ: NSUserdefault অবজেক্ট টাইপ
দোকান
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)
}
দোকান
NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "yourkey")
NSUserDefaults.standardUserDefaults().synchronize()
পুনরুদ্ধার
var returnValue: [NSString]? = NSUserDefaults.standardUserDefaults().objectForKey("yourkey") as? [NSString]
অপসারণ
NSUserDefaults.standardUserDefaults().removeObjectForKey("yourkey")
রেজিস্ট্রার ডেফাল্টস: প্রতিটি অনুসন্ধান তালিকার সর্বশেষ আইটেমটিতে নিবন্ধকরণ অভিধান যোগ করে। এর অর্থ হ'ল এনএসউজারডেফাল্টগুলি অন্য প্রতিটি বৈধ স্থানে একটি মান সন্ধান করার পরে এটি নিবন্ধিত ডিফল্টগুলিতে সন্ধান করবে এবং এগুলিকে "ফলব্যাক" মান হিসাবে কার্যকর করবে। নিবন্ধভুক্ত ডিফল্ট কখনই কোনও অ্যাপ্লিকেশন রানের মধ্যে সংরক্ষণ করা হয় না এবং কেবলমাত্র সেই অ্যাপ্লিকেশনটিতে দৃশ্যমান হয় যা তাদের নিবন্ধভুক্ত করে।
ডিফল্ট কনফিগারেশন ফাইলগুলি থেকে ডিফল্ট মানগুলি স্বয়ংক্রিয়ভাবে নিবন্ধিত হবে।
উদাহরণস্বরূপ অ্যাপ্লিকেশনটি লঞ্চ থেকে সনাক্ত করুন, সংরক্ষণের প্রবর্তনের জন্য কাঠামো তৈরি করুন
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
}
অন্য একটি সম্পত্তি স্যুট নাম , বেশিরভাগ এটি অ্যাপ গ্রুপ ধারণার জন্য ব্যবহৃত হয় , উদাহরণটি আমি এখান থেকে নিয়েছি :
ব্যবহারের কেসটি হ'ল আমি Android এর SharedPreferences এর মতো একটি সনাক্তকারী দ্বারা আমার ইউজারডেফাল্টগুলি (পৃথক ব্যবসায় যুক্তির জন্য পৃথকভাবে গোষ্ঠীকরণের প্রয়োজন হতে পারে) আলাদা করতে চাই। উদাহরণস্বরূপ, যখন আমার অ্যাপ্লিকেশনটিতে কোনও ব্যবহারকারী লগআউট বোতামে ক্লিক করে, আমি তার অ্যাকাউন্ট সম্পর্কিত ডিফল্ট সাফ করতে চাইব তবে ডিভাইসের অবস্থানটি নয়।
let user = UserDefaults(suiteName:"User")
ব্যবহারকারীর ডেফল্টস সিঙ্ক্রোনাইজ করুন , বিশদ তথ্যটি সদৃশ উত্তরে যুক্ত হয়েছে।
ইউজারডিফল্টস ব্যবহারের সেরা উপায়
ধাপ
নমুনা
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.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)
এইভাবে আপনি আদিম ডেটা সবচেয়ে ভাল সঞ্চয় করতে পারেন
আপডেট মানগুলি সংরক্ষণ করতে আপনার কোনও সিঙ্ক্রোনাইজ () ব্যবহারের দরকার নেই। @ মোরিৎজ এটিকে অপ্রয়োজনীয়তার দিকে নির্দেশ করেছেন এবং এটি সম্পর্কে নিবন্ধটি দিয়েছেন more আরও বিশদ জন্য মন্তব্যগুলি দেখুন
synchronize()
, এটি ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে। এটি কেবল এখানেই অকেজো নয় এটি ডিফল্ট অ্যাক্সেসকে ধীর করতে পারে।
সুইফট 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
}
synchronize()
কমান্ডটি ব্যবহার NSUserDefaults
করতে বলেছে । এটি আইওএস 7 এবং এর আগেও আরও বেশি প্রয়োজন হতে পারে তবে আইওএস 8 এবং এর পরেও আপনাকে বেশিরভাগ পরিস্থিতিতে সিঙ্ক্রোনাইজ () না বলা উচিত। আরও তথ্যের জন্য এটি পরীক্ষা করে দেখুন: কোডিংগজপ্লোরার
সুইফট 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]()
:)
আমি এনএসডেটোরিকে সাধারণত সংরক্ষণ করেছি এবং এটি সঠিকভাবে পেয়েছি।
dictForaddress = placemark.addressDictionary! as NSDictionary
let userDefaults = UserDefaults.standard
userDefaults.set(dictForaddress, forKey:Constants.kAddressOfUser)
// এনএসডি অভিধান থেকে ডেটা পাওয়ার জন্য।
let userDefaults = UserDefaults.standard
let dictAddress = userDefaults.object(forKey: Constants.kAddressOfUser) as! NSDictionary
class UserDefaults_WorstPresidentName {
static let key = "appname.worstPresidentName"
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)
}
}
}
}
UserDefault + + 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()
আমি বলতাম আনবুর উত্তর পুরোপুরি ঠিক আছে তবে আমার প্রোগ্রামটি ব্যর্থ না হওয়ার জন্য পছন্দগুলি আনার সময় আমাকে গার্ড যুক্ত করতে হয়েছিল
এখানে সুইফট 5- এ আপডেট হওয়া কোড স্নিপ
ইউজারডিফল্টে ডেটা সংরক্ষণ করা
@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
}
ইউজারডিফল্টস থেকে ডেটা আনছে
@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"))
}
শ্রেণিতে A
, কীটির মান নির্ধারণ করুন:
let text = "hai"
UserDefaults.standard.setValue(text, forKey: "textValue")
শ্রেণিতে ক্লাসে B
ঘোষিত কীটি ব্যবহার করে পাঠ্যের জন্য মানটি পান এবং A
আপনার প্রয়োজনীয় ভেরিয়েবলের কাছে এটি নির্ধারণ করুন:
var valueOfText = UserDefaults.value(forKey: "textValue")
সুইফট 4, আমি ব্যবহারকারীর ডেফল্টগুলি পরিচালনা করার জন্য এনাম ব্যবহার করেছি।
এটি কেবলমাত্র একটি নমুনা কোড। আপনার প্রয়োজনীয়তা অনুসারে আপনি এটি কাস্টমাইজ করতে পারেন।
সংরক্ষণ, পুনরুদ্ধার, সরানোর জন্য For এইভাবে enum এ আপনার ব্যবহারকারীর ডেফাল্ট কীটির জন্য একটি কী যুক্ত করুন। ডেটা টাইপ এবং আপনার প্রয়োজনীয়তা অনুসারে প্রাপ্ত ও সঞ্চয় করার সময় মানগুলি হ্যান্ডেল করুন।
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()
}
}
ব্যবহারকারীর ডেফল্টগুলিতে কোনও মান সঞ্চয় করার জন্য,
if let authToken = resp.data?.token {
UserDefaultsConstant.AuthToken.setValue(value: authToken)
}
ব্যবহারকারীর ডেফল্ট থেকে কোনও মান পুনরুদ্ধারের জন্য,
//As AuthToken value is a string
(UserDefaultsConstant.AuthToken.getValue() as! String)