ما هي SwiftyUserDefaults ولماذا تحتاجها؟
SwiftyUserDefaults هي مكتبة خفيفة وقوية تعمل كغلاف للفئة القياسية UserDefaults في Swift. إذا سبق لك العمل مع UserDefaults مباشرة، فأنت تعلم أن الأمر قد يكون مرهقًا: تحتاج إلى كتابة الكثير من الكود المتكرر لحفظ واسترجاع القيم، وتحديد نوع البيانات صراحةً، واستخدام مفاتيح نصية (مما يعرضك للأخطاء الإملائية)، ومعالجة القيم الاختيارية.
تحل SwiftyUserDefaults كل هذه المشاكل. توفر لك:
- التحقق من الأنواع (Type Safety): يتحقق المترجم من الأنواع، مما يمنع أخطاء وقت التشغيل.
- وصول عام: الوصول إلى القيم من خلال الخاصية المريحة
Defaults. - دعم الأنواع المخصصة: يمكنك حفظ أي من الهياكل أو الفئات الخاصة بك عن طريق تطبيق البروتوكول
DefaultsSerializable. - سكر نحوي (Syntactic Sugar): يصبح العمل مع UserDefaults مشابهًا للعمل مع الخصائص العادية.
- الأمان: يختفي خطر الخطأ الإملائي في المفتاح النصي.
المكتبة مثالية لتخزين كميات صغيرة من البيانات: إعدادات التطبيق، حالة واجهة المستخدم، رموز المصادقة، إلخ. وهي غير مصممة لتخزين كميات كبيرة من البيانات - لهذا الغرض، استخدم Core Data أو Realm أو الملفات.
التثبيت
يتم توزيع SwiftyUserDefaults عبر Swift Package Manager (SPM) و CocoaPods و Carthage. دعنا نستعرض الطريقتين الأكثر شيوعًا.
Swift Package Manager (موصى به)
- في Xcode، افتح القائمة:
File → Add Packages... - أضف رابط المستودع:
https://github.com/sunshinejr/SwiftyUserDefaults.git - اختر الإصدار (يوصى باستخدام أحدث إصدار مستقر) واضغط
Add Package. - تأكد من إضافة الحزمة إلى الهدف (target) الخاص بك.
CocoaPods
أضف إلى ملف Podfile الخاص بك:
target 'YourAppTarget' do
use_frameworks!
pod 'SwiftyUserDefaults', '~> 5.3'
end
ثم نفذ الأمر pod install.
بعد التثبيت، قم باستيراد المكتبة في الملف المطلوب:
import SwiftyUserDefaults
البداية السريعة
دعنا ننتقل مباشرة إلى الكود. إليك كيف يبدو السيناريو النموذجي للعمل مع UserDefaults بدون SwiftyUserDefaults ومعها.
بدون SwiftyUserDefaults (الطريقة التقليدية)
// الحفظ
UserDefaults.standard.set("John", forKey: "user_name")
UserDefaults.standard.set(25, forKey: "user_age")
UserDefaults.standard.set(true, forKey: "is_logged_in")
// القراءة
let name = UserDefaults.standard.string(forKey: "user_name") ?? ""
let age = UserDefaults.standard.integer(forKey: "user_age")
let isLoggedIn = UserDefaults.standard.bool(forKey: "is_logged_in")
مع SwiftyUserDefaults
// تعريف المفاتيح (يمكنك وضعها في ملف منفصل)
extension DefaultsKeys {
var userName: DefaultsKey<String> { .init("user_name") }
var userAge: DefaultsKey<Int> { .init("user_age") }
var isLoggedIn: DefaultsKey<Bool> { .init("is_logged_in") }
}
// الحفظ
Defaults[\.userName] = "John"
Defaults[\.userAge] = 25
Defaults[\.isLoggedIn] = true
// القراءة
let name: String = Defaults[\.userName]
let age: Int = Defaults[\.userAge]
let isLoggedIn: Bool = Defaults[\.isLoggedIn]
print("\(name) عمره \(age) سنة. حالة تسجيل الدخول: \(isLoggedIn)")
كما ترى، أصبح الكود أنظف، ويتم التحقق من الأنواع في مرحلة الترجمة، والمفاتيح محددة في مكان واحد.
الطرق والوظائف الأساسية
دعنا نستعرض 10 من أهم إمكانيات المكتبة مع أمثلة.
1. Defaults[\.key] — الحصول على القيمة وتعيينها
الوظيفة: الطريقة الأساسية للوصول إلى القيم