مع Swift 4، قدمت شركة Apple دعما جديدا وقويا للتعامل مع البيانات، عمل هذا الدعم على تمكين المطورين من تحويل البيانات إلى JSON أو حفظها على القرص الصلب بسهولة ويسر. جوهر هذا الأمر هو البروتوكول القابل للتشفير Codable Protocol، فكيف إذا يتم ذلك؟ هذا ما سأشاركه معكم من تجربتي الشخصية مع البروتوكول القابل للتشفير.
كيف يمكن تعريف برتوكول Codable
بكل بساطة يمكننا تعريف البرتوكول بإستخدام الأمر Structure وإعطاء اسم لهذه الدالة وليكن Movie كالتالي :
struct Movie: Codable { enum MovieGenere: String, Codable { case horror, skifi, comedy, adventure, animation} var name : String var moviesGenere : MovieGenere] var rating : Int }
التعامل مع البروتوكول Codable
الآن وبعد تعريف البرتوكول Codable، نريد القيام بانشاء كائن من هذا الـ Structure المسمي Movie، كل ما في الأمر نقوم بإستخلاص الأوبجيكت ونعطية اسم وليكن upMovie كالتالي:
(let upMovie = Movie(name: "Up", moviesGenere[.comedy , .adventure, .animation]
تحويل الكائن "upMovie" إلى بيانات:
ذلك الكائن هو الأوبجيكت الذي حصلنا عليه من الأمر Structure والمسمي Movie أعطيناه اسم upMovie حتى يتثني لنا التعامل معه وتحويله الي بيانات مستخدمة مع JSON حيث يمكننا القيام بهذا الأمر بكل بساطة عبر الكود التالي :
let jsonData = try? JSONEncoder().encode(upMovie) let jsonString = String(data: jsonData, encoding: .utf8) print("JSON String : " + jsonString!)
ولكن ماذا حدث؟ كل ما في الأمر قامت الدالة ()JSONEncoder بتحويل هذا الأوبجكت المسمي upMovie إلى JSON Data، وبنفس الطريقة يمكننا تحويل أي برتوكول إلى بيانات عبر الدالة JSONEncoder .
لماذا نتعامل مع بروتوكول Codable
في الحقيقة كان الاستخدام السابق عبر التعامل مع مثل هذه الأمور يتم عبر الأمر الNSCoding هذا الأخير كان يعاني من مشاكل كثيرة وقصور عديدة جعلت منه الاختيار الصعب في التعامل مع البيانات، لذلك ظهر البديل القوي Codable Protocol والذي يمكننا من التعامل مع البيانات والتحكم بها بخطوات كود بسيطة.
ماهي تجاربكم في التعامل مع نقل البيانات؟ وهل استخدمتم أي من تلك البروتوكولات من قبل؟