البرمجة

حلول للحصول على Enum من قيم خامة تحتوي على فراغات في لغة Swift

في لغة برمجة Swift، يمكنك الحصول على قيمة enum من خلال القيمة النصية الخام (raw value) باستخدام ميزة البحث (initialization) التي تقدمها Swift. ومن الواضح أن الطريقة الحالية لديك تعمل جيدًا للقيم النصية البسيطة، ولكن تظهر مشكلة عندما يحتوي النص على فراغات.

لتجاوز هذا التحدي، يمكنك استخدام دالة تحويل النص إلى enum بشكل أكثر دقة. يمكنك تحقيق ذلك عبر القيام ببحث يدوي للقيم النصية في enum وتحويلها إلى القيم المناسبة. فيما يلي كود Swift يقوم بذلك:

swift
enum TestEnum: String { case Name case Gender case Birth var rawValue: String { switch self { case .Name: return "Name" case .Gender: return "Gender" case .Birth: return "Birth Day" } } init?(rawValue: String) { switch rawValue { case TestEnum.Name.rawValue: self = .Name case TestEnum.Gender.rawValue: self = .Gender case TestEnum.Birth.rawValue, "Birth Day": self = .Birth default: return nil } } } let name = TestEnum(rawValue: "Name") // Name let gender = TestEnum(rawValue: "Gender") // Gender let birth = TestEnum(rawValue: "Birth Day") // Birth

في هذا الكود، تم إضافة دالة init?(rawValue:) إلى enum، وتتيح هذه الدالة تحويل القيم النصية إلى enum. يتم إجراء البحث يدويًا في القيم النصية ومطابقتها مع القيم في enum، ويتم التعامل بشكل خاص مع القيمة “Birth Day” لضمان التطابق الصحيح.

باستخدام هذا الكود، يمكنك الآن الحصول على قيمة enum بنجاح حتى عندما تحتوي القيمة النصية على فراغات.

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

في Swift، يمكن الوصول إلى قيم الـ Enums عبر القيم الخامة (raw values) باستخدام ميزة rawValue، كما في الشيفرة المقدمة. ومع ذلك، يبدو أن هناك مشكلة عند استخدام قيمة نصية تحتوي على فراغات، حيث يعيد rawValue قيمة nil في هذه الحالة.

لتجاوز هذه المشكلة، يمكنك استخدام إمكانية مخصصة لتحويل النص إلى Enum بحيث يتم تجاوز المشكلة المتعلقة بالفراغات. يمكنك تحديد دالة داخلية في الـ Enum تقوم بتحويل النص المعطى إلى Enum محدد. على سبيل المثال:

swift
enum TestEnum: String { case Name case Gender case Birth var rawValue: String { switch self { case .Name: return "Name" case .Gender: return "Gender" case .Birth: return "Birth Day" } } static func enumFromRawValue(_ rawValue: String) -> TestEnum? { switch rawValue { case "Name": return .Name case "Gender": return .Gender case "Birth Day": return .Birth default: return nil } } } let name = TestEnum.enumFromRawValue("Name") // Name let gender = TestEnum.enumFromRawValue("Gender") // Gender let birth = TestEnum.enumFromRawValue("Birth Day") // Birth

باستخدام هذا النهج، يمكنك الآن الحصول على Enum حتى في حالة القيم التي تحتوي على فراغات. يتم ذلك من خلال استخدام الدالة enumFromRawValue المضافة إلى الـ Enum لتحويل النص إلى قيمة Enum المطابقة.

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

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

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!