البرمجة

تحويل NSMutableDictionary إلى [AnyHashable: Any] في Swift 3

في Swift 3، تم تغيير بعض الأشياء فيما يتعلق بأنواع البيانات وتوافقها مع نظام النوع الجديد. واجهت مشكلة في تحويل نوع البيانات من NSMutableDictionary إلى النوع المتوقع [AnyHashable: Any]!. لتلافي هذه المشكلة، يمكن اتباع الطرق التالية:

أولاً، يمكن تحويل NSMutableDictionary إلى [AnyHashable: Any]! باستخدام NSDictionary مباشرة، حيث يمكن استخدام المصفوفة allKeys للحصول على مفاتيح القاموس وتحويلها إلى AnyHashable واستخدام القيم المتعلقة بها لتشكيل القاموس الجديد.

swift
func logEvent(_ eventName: String, userData: NSMutableDictionary?) { var userData = userData ?? NSMutableDictionary() // Set base properties userData.setObject(gUser.tofus.count, forKey: "Num Tofus" as NSCopying) userData.setObject(gUser.getLifetimeTofus(), forKey: "Num Lifetime Tofus" as NSCopying) // Convert NSMutableDictionary to [AnyHashable: Any] let convertedData = userData.reduce(into: [AnyHashable: Any]()) { result, pair in if let key = pair.key as? AnyHashable { result[key] = pair.value } } // Call Flurry DispatchQueue.main.async { Flurry.logEvent(eventName, withParameters: convertedData) } }

ثانياً، بدلاً من استخدام NSMutableDictionary، يمكن استخدام القاموس العادي [String: Any] وتحويله مباشرة إلى [AnyHashable: Any]! دون الحاجة إلى تعقيد الأمور.

swift
func logEvent(_ eventName: String, userData: [String: Any]?) { var userData = userData ?? [:] // Set base properties userData["Num Tofus"] = gUser.tofus.count userData["Num Lifetime Tofus"] = gUser.getLifetimeTofus() // Call Flurry DispatchQueue.main.async { Flurry.logEvent(eventName, withParameters: userData) } }

هذه الطرقين تعملان بشكل صحيح في Swift 3، وستسمح لك بتحويل البيانات بشكل صحيح إلى النوع المتوقع دون أي مشاكل.

المزيد من المعلومات

بالطبع، ها هو المقال بالكامل:


Swift 3: لا يمكن تحويل قيمة من نوع ‘NSMutableDictionary’ إلى النوع المتوقع ‘[AnyHashable: Any]!’

تغيرت بعض الأشياء في Swift 3، وتحديدًا فيما يتعلق بأنواع البيانات وتوافقها مع نظام النوع الجديد، وقد يواجه المطورين بعض التحديات في التعامل مع الأنواع المتغيرة.

إذا واجهت مشكلة في تحويل نوع البيانات من NSMutableDictionary إلى النوع المتوقع [AnyHashable: Any]!، فإليك بعض الطرق التي يمكنك اتباعها لحل هذه المشكلة:

أولًا، يمكن تحويل NSMutableDictionary إلى [AnyHashable: Any]! باستخدام NSDictionary مباشرة. يمكن استخدام المصفوفة allKeys للحصول على مفاتيح القاموس وتحويلها إلى AnyHashable واستخدام القيم المتعلقة بها لتشكيل القاموس الجديد.

swift
func logEvent(_ eventName: String, userData: NSMutableDictionary?) { var userData = userData ?? NSMutableDictionary() // Set base properties userData.setObject(gUser.tofus.count, forKey: "Num Tofus" as NSCopying) userData.setObject(gUser.getLifetimeTofus(), forKey: "Num Lifetime Tofus" as NSCopying) // Convert NSMutableDictionary to [AnyHashable: Any] let convertedData = userData.reduce(into: [AnyHashable: Any]()) { result, pair in if let key = pair.key as? AnyHashable { result[key] = pair.value } } // Call Flurry DispatchQueue.main.async { Flurry.logEvent(eventName, withParameters: convertedData) } }

ثانيًا، بدلاً من استخدام NSMutableDictionary، يمكن استخدام القاموس العادي [String: Any] وتحويله مباشرة إلى [AnyHashable: Any]! دون الحاجة إلى تعقيد الأمور.

swift
func logEvent(_ eventName: String, userData: [String: Any]?) { var userData = userData ?? [:] // Set base properties userData["Num Tofus"] = gUser.tofus.count userData["Num Lifetime Tofus"] = gUser.getLifetimeTofus() // Call Flurry DispatchQueue.main.async { Flurry.logEvent(eventName, withParameters: userData) } }

هذه الطرقين تعملان بشكل صحيح في Swift 3، وستسمح لك بتحويل البيانات بشكل صحيح إلى النوع المتوقع دون أي مشاكل.

باستخدام أي من هذه الطرق، يمكنك الآن تجاوز مشكلة تحويل قيمة من نوع NSMutableDictionary إلى النوع المتوقع [AnyHashable: Any]! واستمرار في تطوير تطبيقاتك بدون عوائق.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر