في Swift 3، تم تغيير بعض الأشياء فيما يتعلق بأنواع البيانات وتوافقها مع نظام النوع الجديد. واجهت مشكلة في تحويل نوع البيانات من NSMutableDictionary
إلى النوع المتوقع [AnyHashable: Any]!
. لتلافي هذه المشكلة، يمكن اتباع الطرق التالية:
أولاً، يمكن تحويل NSMutableDictionary
إلى [AnyHashable: Any]!
باستخدام NSDictionary
مباشرة، حيث يمكن استخدام المصفوفة allKeys
للحصول على مفاتيح القاموس وتحويلها إلى AnyHashable
واستخدام القيم المتعلقة بها لتشكيل القاموس الجديد.
swiftfunc 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]!
دون الحاجة إلى تعقيد الأمور.
swiftfunc 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
واستخدام القيم المتعلقة بها لتشكيل القاموس الجديد.
swiftfunc 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]!
دون الحاجة إلى تعقيد الأمور.
swiftfunc 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]!
واستمرار في تطوير تطبيقاتك بدون عوائق.