تحويل NSURL إلى NSString في Swift: دليل كامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة عن المهمة: لماذا NSURL و NSString مهمان جدًا؟

\n\n

يواجه كل مطور iOS عاجلاً أم آجلاً مهمة: لديك كائن NSURL، لكنك تحتاج إلى الحصول منه على سلسلة نصية عادية — NSString (أو في Swift الحديث، ببساطة String). قد يبدو الأمر بسيطًا؟ ومع ذلك، هناك العديد من المزالق المخفية هنا: من فك تشفير الأحرف غير الصحيح إلى فقدان أجزاء من URL.

\n\n

في Stack Overflow، جمع سؤال "تحويل NSURL إلى NSString" آلاف المشاهدات — إنه كلاسيكي حقيقي. قررنا في PythonLib تحليل الموضوع بدقة، حتى لا تضيع وقتك أبدًا في البحث عن حل. هيا بنا!

\n\n

ما هما NSURL و NSString في Swift؟

\n\n

قبل الانتقال إلى الكود، دعنا نتذكر بسرعة ما نتعامل معه.

\n\n

NSURL هو كائن يمثل مؤشرًا موحدًا للموارد (URL). يمكنه تحليل العناوين إلى مكونات: المخطط، المضيف، المسار، المعلمات، وهكذا. في Swift، حل محله النوع الأصلي URL، لكن NSURL لا يزال يُستخدم بنشاط في الكود القديم و Core Foundation وعند العمل مع مكتبات Objective-C.

\n\n

NSString هو سلسلة نصية في Objective-C، والتي يتم ربطها تلقائيًا (bridges) في Swift بالنوع String. لذلك، عندما نقول "تحويل NSURL إلى NSString"، فإننا في الواقع نحصل إما على String أو NSString?.

\n\n

الطرق الرئيسية لتحويل NSURL إلى NSString

\n\n

دعنا نستعرض ثلاث طرق رئيسية. كل منها مناسب لسيناريوهات مختلفة.

\n\n

1. استخدام الخاصية absoluteString

\n\n

الطريقة الأكثر شيوعًا وسهولة. الخاصية absoluteString تُرجع سلسلة URL الكاملة، بما في ذلك جميع المكونات.

\n\n
import Foundation\n\nlet url = NSURL(string: "https://pythonlib.ru/swift-guide?page=1&lang=ru")!\nlet urlString = url.absoluteString\n\nprint(urlString) // "https://pythonlib.ru/swift-guide?page=1&lang=ru"
\n\n

هام: absoluteString تُرجع سلسلة قد تحتوي على ترميز النسبة المئوية (percent-encoding). على سبيل المثال، ستظهر المسافات كـ %20، والأحرف السيريلية كـ %D0%9F.

\n\n

2. الخاصية relativeString

\n\n

إذا كان عنوان URL الخاص بك نسبيًا (لا يحتوي على مخطط ومضيف)، فإن relativeString ستعيد الجزء النسبي فقط.

\n\n
let baseURL = NSURL(string: "https://pythonlib.ru")!\nlet relativeURL = NSURL(string: "swift-guide", relativeTo: baseURL)!\n\nlet absolute = relativeURL.absoluteString\nlet relative = relativeURL.relativeString\n\nprint(absolute) // "https://pythonlib.ru/swift-guide"\nprint(relative) // "/swift-guide"
\n\n

هذه الطريقة مفيدة بشكل خاص عند العمل مع عناوين URL الأساسية والمسارات النسبية.

\n\n

3. تحليل مكونات URL يدويًا

\n\n

أحيانًا لا تحتاج إلى URL كامل، بل إلى جزء منه فقط: المسار، المضيف، أو المعلمات. لهذا، استخدم خصائص NSURLComponents أو الوصول المباشر إلى NSURL.

\n\n
let url = NSURL(string: "https://pythonlib.ru/ios/guide?query=swift#section1")!\n\nlet scheme = url.scheme ?? ""\nlet host = url.host ?? ""\nlet path = url.path ?? ""\nlet query = url.query ?? ""\nlet fragment = url.fragment ?? ""\n\nprint("المخطط: \\(scheme)")\nprint("المضيف: \\(host)")\nprint("المسار: \\(path)")\nprint("المعلمات: \\(query)")\nprint("المرساة: \\(fragment)")
\n\n

يمنحك هذا النهج أقصى تحكم فيما تستخرجه بالضبط.

\n\n

الأخطاء الشائعة وكيفية تجنبها

\n\n

حتى المطورين ذوي الخبرة يتعثرون أحيانًا في الأمور البسيطة. إليك ثلاث مشكلات شائعة عند تحويل NSURL إلى NSString.

\n\n

الخطأ 1: نسيان الاختيارية

\n\n

NSURL(string:) يُرجع نوعًا اختياريًا NSURL?. إذا كانت السلسلة

المدونات

توصيات الكتب