اذهب إلى المحتوى

Lujain Maaz

الأعضاء
  • المساهمات

    344
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    27

كل منشورات العضو Lujain Maaz

  1. يوجد طريقتين للوصول إلى عناوين عناصر مصفوفة array في ++C وبلا شك أن كلا الطريقتين تعتمد على المؤشرات pointers. الطريقة الأولى هي باستخدام pointer notation في هذه الطريقة يتم الاعتماد على المصفوفة نفسها في الوصول لعناوين العناصر فيها إذ أن reference المصفوفة يحوي على عنوان أول عنصر في الذاكرة مثال: #include <iostream> using namespace std; int main() { float a[5]; cout<<"Displaying address using pointers notation: "<< endl; for (int i = 0; i < 5; ++i) { cout << a+i <<endl; } return 0; }بما أن عناصر المصفوفة تُخزّن ضمن مجال واحد وبالترتيب فستكون عناوين العناصر متسلسلة ابتداءً من عنوان العنصر الأول وحتى الأخير أي أن كل عنوان يزيد عن سابقه بـ 1 كما في المثال السابق. الطريقة الثانية هي باستخدام المؤشرات pointers وتتم بإسناد المصفوفة إلى المؤشر pointer ثم زيادة قيمة المؤشر كل مرة بمقدار 1 كما في المثال التالي: #include <iostream> using namespace std; int main() { float a[5]; float *ptr; cout << "Displaying address using arrays: "<<endl; for (int i = 0; i < 5; ++i) { cout << "&a[" << i << "] = " << &a[i] <<endl; } ptr = a; // ptr = &a[0] cout<<"\nDisplaying address using pointers: "<< endl; for (int i = 0; i < 5; ++i) { cout << "ptr + " << i << " = "<<ptr+i <<endl; } return 0; }ملاحظات: &a[i]تعطي عنوان العنصر عند الـ index i أي أنها تساوي قيمة ptr+i. للوصول إلى عنوان عنصر ما بشكل مباشر من دون اللجوء إلى حسابه من عنوان أول عنصر؛ حدّد فهرس العنصر index في الشيفرة: &a[i]مثلًا الوصول لعنوان العنصر الثالث في المصفوفة: int* ptr; int a[5]; ptr = &a[2]; // &a[2] is the address of third element of a[5].
  2. المؤشر هو متغير يُخزّن قيمة عنوان متغير آخر في الذاكرة بالنظام الست عشري hexadecimal، بالنسبة لاستخدام المؤشرات يتم اسناد عنوان متغير ما (عن طريق كتابة علامة '&' وتُقرأ "رفرنس" قبل المتغير) إلى المؤشر pointer عند تعريفه مثال: int number = 5; int *p = &number;أو بعد تعريف المؤشر: int number = 5; int *p; p= &numberلاحظ أن علامة نجمة '*' عرّفت المتغير على أنه pointer أي أنه عند وجود علامة '*' بعد نوع المتغير فهذا يعني أن المتغير هو مؤشر pointer. ولكن هناك استخدام آخر للعلامة '*' لاحظ المثال التالي: int number = 5; int *p; p= &number; printf(*p);عند وضع علامة '*' قبل المتغير وبعد تعريفه وإسناد عنوان متغير آخر إليه فهذا يعني أن p* هي قيمة هذا المتغير الذي يؤشر عليه المؤشر p. أي أن *p = 5 وهي قيمة المتغير number. int *p; // تعرف مؤشر من نوع int int number=5;// تعرف متغير من نوع int وقيمته 5 p= &number// تسند عنوان المتغير number في الذاكرة إلى المؤشر p int x = *p; تسند قيمة المتغير الذي يؤشر عليه المؤشر p إلى المتغير x أي *p=5
  3. union هي أحد بنى المعطيات في لغة C وهي مماثلة تمامًا للهياكل Structure وتعرّف بنفس الطريقة التي يعرّف بها الـ struct union car{ char name[50]; int price; };وكذلك المتغيرات من نوع union تُنشأ بشكل مماثل للمتغيرات من نوع struct union car{ char name[50]; int price; }c1, c2, *c3; OR; union car{ char name[50]; int price; }; -------Inside Function----------- union car c1, c2, *c3;الفرق بين union و struct هو في تخصيص الذاكرة بينهما فمقدار الذاكرة المطلوبة لتخزين متغير من نوع struct هو مجموع حجم الذاكرة لجميع الأعضاء members في المتغير struct، بينما الذاكرة المطلوبة لتخزين متغير من نوع union هو مقدار الذاكرة المطلوبة لأكبر عنصر في المتغير union. المثال التالي يوضح بشكل كبير الفرق بين حجم الذاكرة المطلوبة لتخزين متغير struct وحجم الذاكرة المطلوبة لتخزين متغير union: #include <stdio.h> union job { //defining a union char name[32]; float salary; int worker_no; }u; struct job1 { char name[32]; float salary; int worker_no; }s; int main(){ printf("size of union = %d",sizeof(u)); printf("\nsize of structure = %d", sizeof(s)); return 0; }النتيجة: size of union = 32 size of structure = 40حجم الذاكرة المطلوبة للمتغير struct في المثال أعلاه: حجم الذاكر المطلوبة للمتغير union في المثال أعلاه: ما الفرق بين union و struct في C؟
  4. تعتبر المؤشرات Pointers من أقوى الميزات التي تمتاز بها لغة ++C عن باقي اللغات المشهورة مثل جافا، فيجوال بيسك..الخ. لفهم عمل المؤشرات واستخدامها لابد أولًا أن يكون لديك معرفة عن ما هو العنوان Address في ذاكرة الحاسوب. تُقسم ذاكرة الحاسوب إلى أجزاء من bytes وكل بايت لديه العنوان الخاص به على سبيل المثال في ذاكرة حجمها 1 KB يوجد 1024 bytes وكل بايت يعطي عنوان (أي أن مجال العناوين من 0 - 1023). فالمؤشرات إذًا هي متغيرات تختزن عناوين متغيرات أخرى في الذاكرة بالـ hexadecimal النظام الست عشري، يمكن للمؤشرات أن تؤشر على متغير من نوع primitive أو عنصر من مصفوفة array أو غرض object. يُعرّف المؤشر بطريقتين: int *p; أو int* p;مثال على طريقة تعريف مؤشر وإسناد عنوان متغير من نوع int إليه: int* ptr; int a = 5; ptr = &a; // &a is the address of a.التعليمة البرمجية int* ptr تعرف مؤشر pointer من نوع int أي أن العنوان الذي يختزنه هو عنوان متغير من نوع int. التعليمة البرمجية ptr = &a تقوم بإسناد عنوان المتغير a إلى المؤشر p (أي أن a& هو عنوان المتغير a وتُقرأ ( Reference a) رفرنس a). مثال: #include <iostream> using namespace std; int main() { int *pc, c; c = 5; cout<< "Address of c (&c): " << &c << endl; cout<< "Value of c (c): " << c << endl << endl; pc = &c; // Pointer pc holds the memory address of variable c cout<< "Address that pointer pc holds (pc): "<< pc << endl; cout<< "Content of the address pointer pc holds (*pc): " << *pc << endl << endl; c = 11; // The content inside memory address &c is changed from 5 to 11. cout << "Address pointer pc holds (pc): " << pc << endl; cout << "Content of the address pointer pc holds (*pc): " << *pc << endl << endl; *pc = 2; cout<< "Address of c (&c): "<< &c <<endl; cout<<"Value of c (c): "<< c<<endl<< endl; return 0; }النتيجة: ماذا تعني المؤشرات pointers في ++C ؟
  5. تعلم البرمجة بحد ذاتها لا يرتبط بشكل أساسي بلغة البرمجة لأن البرمجة تُعلّم طريقة التفكير وطريقة الوصول للمشكلة وإيجاد حل لها بأفضل وأسرع الطرق. عمومًا أنصحك أن تبدأ بلغة ++C فهي لغة أساسية وتصقل الكثير من تفكيرك البرمجي في المستقبل حيث أن معظم اللّغات التي ظهرت بعد ++C هي لغات أسهل منها وأكثر مرونة وحين تتقن لغة ما لن يصعب عليك تعلم لغة برمجة جديدة طالما أنك امتلكت التفكير البرمجي السليم. عليك التركيز على البرمجة الغرضية التوجه أو الكائنية التوجه Object Oriented Programming فبعض اللغات تعتمد بشكل أساسي على OOP وتسمى Pure OOP Language مثل لغة جافا Java. غالبًا يُشرح مفهوم البرمجة غرضية التوجه في لغة C++ في الدروس الأخيرة. أيضًا الإلمام ببرمجة تطبيقات الهواتف الذكية يعتبر من الأمور التي لا غنى عنها لأي مبرمج أو مطور ولا سيما بوجود تسارع كبير يشهده العالم في هذا المجال. بالتوفيق.
  6. يوجد عدّة طرق لطباعة المحارف في مصفوفة char، الطريقة الأولى باستخدام حلقة تكرار foreach والخاصية .characters كما في المثال التالي: for character in "Dog!".characters { print(character) } طريقة أخرى باستخدام string casting: let catCharacters: [Character] = ["C", "a", "t", "!"] let catString = String(catCharacters) print(catString) // prints "Cat!"كيف أطبع سلسلة من محارف characters في Swift؟
  7. Facebook graph API هو وسيلة أساسية للحصول على المعلومات من منصة فيسبوك على تطبيقك أي أنه يُستخدم للاستعلام عن البيانات أو نشر أي منشور جديد أو إدارة الإعلانات وتحميل الصور ومجموعة متنوعة من المهام الأخرى التي قد يحتاج تطبيقك القيام بها. تتألف المعلومات المتمثلة في Facebook Graph من : العقد nodes وهي "الأشياء" مثل المستخدم، صورة، صفحة، تعليق. الحواف edges وهي الصلات بين تلك "الأشياء" مثل صور الصفحة أو التعليقات على صورة. الحقول fields وهي المعلومات عن تلك الأشياء مثل عيد ميلاد الشخص أو اسم الصفحة. يمكنك الاطلاع على التوثيق الخاص بـ Facebook Graph API والقواعد Syntax لكيفية جلب المعلومات باستخدام Graph API Explorer
  8. ERP هي اختصار لـ Enterprise Resource Planning أي تخطيط موارد المشاريع أو المؤسسات. يمكن تعريف ERP على أنها منهجية تحث الشركات على استخدام الموارد بأكثر الطرق فعالية وجودة أي أن ERP هو ليس برنامج أو تطبيق software ولا يمكن تسميته بنظام system لأن الشركات التي تعمل وفق منهجية ERP تقوم ببناء تطبيقات وأنظمة تعمل وفق تلك المنهجية وينتج عنها مثلًا ERP Systems و ERP Solutions...الخ. تهدف أنظمة ERP إلى ربط جميع وحدات الشركة أو المؤسسة مع بعضها البعض (نظام الموارد البشرية، المستودعات، المحاسبة..الخ) بمجمل الأحول لابد لأي شركة أو مؤسسة تطمح لتطوير ذاتها وزيادة نشاطها من استخدام نظام تخطيط الموارد. مثال على أنظمة تعمل وفق منهجية ERP: E2 Shop SystemIntacctما هو ERP ولم يستخدم؟
  9. توفر Swift العديد من الطرق للتعامل مع الملفات وتختلف هذه الطرق بحسب نوع إصدار Swift الذي تعمل عليه. يمكن استخدام NSFileManager وهو عبارة عن صف class يحوي على مجموعة من الدوال للقراءة والكتابة على الملفات. طريقة أخرى أكثر شيوعًا في الاستخدام للكتابة على الملفات في Swift 1.x باستخدام الدالة WriteToFile. حيث يتم تمرير مسار الملف الذي تريد الكتابة عليه على الشكل التالي: let file = "file.txt" if let dirs : [String] = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String] { let dir = dirs[0] //documents directory let path = dir.stringByAppendingPathComponent(file); let text = "some text" //writing text.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil);للقراءة من ملف يتم استخدام contentsOfFile وتمرير مسار الملف الذي تريد القراءة منه كما في المثال التالي: //reading let text2 = String(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil)في إصدار Swift 2.0 يجب وضع error handling do / catch: let file = "file.txt" //this is the file. we will write to and read from it let text = "some text" //just a text if let dir : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first { let path = dir.stringByAppendingPathComponent(file); //writing do { try text.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding) } catch {/* error handling here */} //reading do { let text2 = try NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding) } catch {/* error handling here */} }كيف أكتب وأقرأ من ملف نصي باستخدام لغة Swift؟
  10. تقسّم السلسلة النصية string في Swift بعدّة طرق: الطريقة الأولى استخدام الدالة componentsSeparatedByString التي تأخذ معامل واحد argument وهو المحرف الذي تريد تقسيم السلسلة النصية عنده مثال: var fullName: String = "First, Last" let array = fullName.componentsSeparatedByString(",") print(array); أو يمكن استخدام characters.split وتمرير المحرف الذي ستقسّم السلسلة على أساسه: characters.split(",")كما في المثال التالي: let fullName = "First Last" let fullNameArr = fullName.characters.split(" ") let firstName = String(fullNameArr[0])الطريقة الثانية متاحة في إصدارات Swift التي تسبق الإصدار Swift 2.0 باستخدام الدالة Split: var fullName = "First Last" var fullNameArray = split(fullName) {$0 == " "} var firstName: String = fullNameArray[0] var lastName: String? = fullNameArray.count > 1 ? fullNameArray[1] : nilكيف أقسم سلسلة نصية string وأحولها إلى مصفوفة array في Apple Swift؟
  11. لطباعة نوع المتغير في Swift يمكنك استخدام التعبير post-fix self expression للوصول إلى نوع المتغير أو نوع القيمة. على سبيل المثال someClass.self تُرجع اسم الصف نفسه لأن الصف هو نوع بحد ذاته. يمكن أيضًا استخدام التعبير أو الخاصية dynamicType للوصول إلى نوع القيمة في run-time كما في المثال التالي: class PureSwiftClass { } var myvar0 = NSString() // Objective-C class var myvar1 = PureSwiftClass() var myvar2 = 42 var myvar3 = "Hans" print( "String(myvar0.dynamicType) -> \(myvar0.dynamicType)") print( "String(myvar1.dynamicType) -> \(myvar1.dynamicType)") print( "String(myvar2.dynamicType) -> \(myvar2.dynamicType)") print( "String(myvar3.dynamicType) -> \(myvar3.dynamicType)") استخدام التعبير post-fix self expression: print( "String(Int.self) -> \(Int.self)") print( "String((Int?).self -> \((Int?).self)") print( "String(NSString.self) -> \(NSString.self)") print( "String(Array<String>.self) -> \(Array<String>.self)")كيف أطبع نوع المتغير أو نوع الصف class في Apple Swift
  12. يوجد عدّة طرق لتغيير ترتيب عناصر في مصفوفة بشكل عشوائي في Swift، الطريقة الأولى هي باستخدام Shuffle كـ دالة method. اكتب الشيفرة التالية: func shuffle<C: MutableCollectionType where C.Index == Int>(var list: C) -> C { let c = count(list) if c < 2 { return list } for i in 0..<(c - 1) { let j = Int(arc4random_uniform(UInt32(c - i))) + i swap(&list[i], &list[j]) } return list } shuffle([1, 2, 3, 4, 5, 6, 7, 8]) // e.g., [6, 1, 8, 3, 2, 4, 7, 5] shuffle(["hello", "goodbye", "ciao"]) // e.g., ["ciao", "goodbye", "hello"]الطريقة الثانية باستخدام (extension (shuffle as a mutating array method اكتب الشيفرة التالية: extension Array { mutating func shuffle() { if count < 2 { return } for i in 0..<(count - 1) { let j = Int(arc4random_uniform(UInt32(count - i))) + i swap(&self[i], &self[j]) } } } var numbers = [1, 2, 3, 4, 5, 6, 7, 8] numbers.shuffle()الطريقة الثالثة باستخدام (extension (shuffle as a non-mutating array method اكتب الشيفرة التالية: extension Array { func shuffled() -> [T] { if count < 2 { return self } var list = self for i in 0..<(list.count - 1) { let j = Int(arc4random_uniform(UInt32(list.count - i))) + i swap(&list[i], &list[j]) } return list } } let numbers = [1, 2, 3, 4, 5, 6, 7, 8] let mixedup = numbers.shuffled() // e.g., mixedup == [6, 1, 8, 3, 2, 4, 7, 5]
  13. ببساطة "let" تُعرّف متغير ثابت constant أي لا يمكن تغيير قيمته بعد إعطاءه قيمة مثال: let myVariable= 42بينما "var" تعرف متغير عادي: var myVariable= 42أي أنه في حال رغبتك بتخزين قيم في متغيرات ولا تريد أن يحدث عليها أي تغير فيما بعد عليك أن تُعرّفها كمتغيرات "let" واستخدم المتغيرات "var" فقط عندما تكون القيم المخزنة بها ستتغير لاحقًا.
  14. تحتوي Swift على الدالة ()Contains والتي تُرجع قيمة منطقية Boolean true or false. في حال إيجاد العنصر في المصفوفة تُرجع قيمة true وفي حال عدم وجوده ترجع قيمة false. للبحث عن عنصر معين في مصفوفة اكتب الشيفرة التالية: var elements = [1,2,3,4,5] if elements.contains(5) { // any matching items are in results } else { // not found }في الإصدار السابق لـ Swift 2.0 تُكتب ()Contains بالطريقة التالية: var elements = [1,2,3,4,5] if contains(elements, 5) { println("yes") }في حال كانت المصفوفة من نوع object وتريد معرفة فيما إذا كانت المصفوفة تحتوي على object معين أم لا استخدم الدالة ()ContainsObject. مثلًا مصفوفة من نوع imageFile: class imageFile { var fileName = String() var fileID = Int() } var images : [imageFile] = []إنشاء غرضين 2 objects وتعبئتهما في المصفوفة: var aImage = imageFile() aImage.fileName = "image1.png" aImage.fileID = 300 images.append(aImage) aImage = imageFile() aImage.fileName = "image1.png" aImage.fileID = 202 images.append(aImage)التأكد من وجود الغرض aImage ضمن المصفوفة: if (images as NSArray).containsObject(aImage) { // Do something print("yes"); }
  15. تعني optional في Swift أن المتغيّر يمكن أن يحوي على قيمة وقد لا يحوي. على خلاف لغات البرمجة الأخرى إذ أنه يجب إعطاء قيمة للمتغير فيها حتى ولو كانت قيمة string فارغة. يُعرّف المتغير في swift على أنه متغيّر اختياري optional بوضع علامة استفهام "؟" بعد نوع المتغير مثال: var myOptionalString:String? = "Hello"متى يكون استخدام القيمة optional مفيد؟ 1- في حال كانت الخاصية غير موجودة عند كل عناصر الفئة المعينة مثلًا خاصية الاسم الثاني أو middleName. 2- عندما يمكن لدالة ما أن تُرجع قيمة أو لا شيء مثل الدالة التي تقوم بالبحث عن عنصر ما في مصفوفة. 3- عندما يكون هناك إمكانية للدالة أن ترجع نتيجة أو خطأ او لا شيء. ماذا تعني optional في Swift وكيف تستخدم؟
  16. في الإصدار ما قبل Swift 2.0 للتحويل من string إلى double في Swift استخدم الطريقة التالية: (swiftString as NSString).doubleValueفي التحديث Swift 2.0 استخدام الدالة Float كما في المثال التالي: let myDouble = Float(myString)ويمكن استخدام الدالة ()toDouble كما في الشيفرة التالية: var myString = "4.2" var myDouble = myString.toDouble()طريقة استخدام NSNumberFormatter للتحويل من String إلى double: let formatter = NSNumberFormatter() formatter.locale = NSLocale(localeIdentifier: "fr_FR") let double = formatter.numberFromString("100,25") print(double)طريقة أخرى باستخدام extension String: extension String { func toDouble() -> Double? { return NSNumberFormatter().numberFromString(self)?.doubleValue } }
  17. يمكن ترتيب مصفوفة من نوع object في Swift اعتمادًا على خاصية معينة بطريقيتن إما باستخدام الدالة ()sort أو الدالة ()sortIntPlace: ليكن مثلًا الصف ImageFile: class imageFile { var fileName = String() var fileID = Int() }ونريد إنشاء مصفوفة من نوع imageFile وتعبئتها بغرضين 2 Objects من نوع imageFile بالشكل التالي: var images : [imageFile] = [] var aImage = imageFile() aImage.fileName = "image1.png" aImage.fileID = 300 images.append(aImage) aImage = imageFile() aImage.fileName = "image1.png" aImage.fileID = 202 images.append(aImage) لترتيب المصفوفة على حسب قيمة id باستخدام الدالة ()sort اكتب الشيفرة التالية: images.sort({ $0.fileID > $1.fileID })لإسناد المصفوفة بعد ترتيبها لمصفوفة جديدة اكتب الشيفرة التالية: let sortedArray = images.sort { $0.fileID.compare($1.fileID) == .OrderedAscending } // use `sorted` in Swift 1.لترتيب المصفوفة باستخدام الدالة ()sortIntPlace اكتب: images.sortInPlace { $0.fileID.compare($1.fileID) == .OrderedAscending }طباعة المصفوفة بعد ترتيبها: for imageFile in images { print(imageFile.fileID) }
  18. في الإصدارات ما قبل Swift 2.0 للتحويل من int إلى String باستخدام (casting (String بالشكل التالي: let x : Int = 42 var myString = String(x) print(myString)الطريقة الثانية باستخدام الدالة toString: extension Int { func toString() -> String { var myString = String(self) return myString } }طريقة أخرى: let x : Int = 45 var stringValue = "\(x)" print(stringValue) وللتحويل من String إلى int استخدام الدالة ()toInt let myString : String = "42" let x: Int? = myString.toInt() if (x != nil) { // Successfully converted String to Int }إن كنت تستخدم إصدار Swift 2.0 يمكنك استخدام الطريقة التالية للتحويل من String إلى int let x: Int? = Int(myString)
  19. يوفّر الصف UIDatePicker إمكانية لتحديد التاريخ والوقت من خلال مجموعة من الخصائص، تطبيق Clock في آيفون هو مثال عن استخدام UIDatePicker في المؤقت Timer والمنبه Alarm. لإنشاء Calendar في Swift اكتب الشيفرة التالية: @NSCopying var calendar: NSCalendar!لإضافة date picker لتطبيقك افتح الملف Main.storyboard واسحب العنصر iOS DatePicker control إلى storyboard كما في الشكل التالي: ثم حدد خصائص الـ datePicker لإظهارها في المنتصف بتحديد الخاصيتين Horizontal center in container و Vertical center in container اختر assistance editor واذهب إلى ملف ViewController.swift وأنشئ IBOutlet للعنصر UIDatePicker وقم بتسميته مثلًا myDatePicker كما في الشكل التالي: ثم أنشئ دالة IBAction للعنصر myDatePicker وقم بتسميته مثلًا datePickerAction ثم اكتب الشيفرة التالية في الدالة datePickerAction @IBAction func datePickerAction(sender: AnyObject) { var dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "dd-MM-yyyy HH:mm" var strDate = dateFormatter.stringFromDate(myDatePicker.date) self.selectedDate.text = strDate } كيف أُظهر date picker في table view باستخدام Apple Swift؟
  20. يوجد عدة طرق لحساب طول السلسلة النصية string في لغة البرمجة swift وذلك بحسب الإصدار الذي تعمل عليه: في إصدار (swift 2.0(Xcode 7 يمكنك حساب عدد العناصر في سلسلة نصية string عن طريق استخدام الدالة التالية: let myString = "Test" let length = myString.characters.count // = 4في إصدار (swift 1.2(Xcode 6.3 يُحسب طول السلسلة النصية string باستخدام الدالة ()count: let myString = "Test" let length = count(myString) // = 4قبل إصدار (swift 1.2(Xcode 6.3 يُحسب طول السلسلة النصية string باستخدام الدالة ()countElements. let myString = "Test" let length = countElements(myString) // = 6يمكنك أيضًا استخدام الخاصية endIndex والتي ترجع طول السلسلة النصية string: let str: String = "Hello, World" print(str.endIndex) // 12طريقة أخرى وهي باستخدام NSString: let str2 = "Hello, World" print(NSString(string: str2).length) // 12
  21. تختلف طريقة التعامل مع ()try() / catch في swift إذ أنها هنا أكثر شمولية ومرونة حيث أنها تمسك وتعالج كل خطأ ممكن أن يحدث وليس فقط الخطأ الذي تتوقعه أنت أن يحدث. يُكتب نموذج معالجة الخطأ في swift بهذا الشكل ()do() / catch. do { try expression statements } catch pattern 1 { statements } catch pattern 2 where condition { statements }يتم تحديد نوع الخطأ الذي ممكن أن يرميه التابع أو الدالة باستخدام catch pattern، مثلًا إن رُمي خطأ من الشيفرة المكتوبة في جملة do فإنه سيذهب إلى جمل catch ويقارن ليحدد أي جملة منهم ستقوم بالإمساك بالخطأ ومن ثم معالجته. مثال: do { let encrypted = try encryptString("secret information!", withPassword: "") print(encrypted) } catch EncryptionError.Empty { print("You must provide a password.") } catch EncryptionError.Short { print("Passwords must be at least five characters, preferably eight or more.") } catch { print("Something went wrong!") }كيف أستخدم() try() catch في Apple Swift؟
  22. يتم إنشاء Enumeration في Swift بكتابة الكلمة المفتاحية enum وبعدها الاسم ويكون التعريف الداخي للـ enumeration بين قوسين: enum SomeEnumeration { // enumeration definition goes here }القيم التي تعرّف في الـ Enum هي عبارة عن حالات Cases لذا عند كتابة التعريف الداخلي ضع كلمة case قبل اسم النوع. المثال التالي يعرّف النقاط الأربع الأساسية للبوصلة: enum CompassPoint { case North case South case East case West }ملاحظة: على خلاف لغات C و objective-C لا يتم في لغة swift إعطاء حالات التعداد عدد صحيح افتراضي عند إنشائها. فمثلًا في المثال أعلاه الحالات (North, South, East, West) لا تساوي ضمنيًا القيم 0, 1, 2, 3 بل هي قيم كاملة في حد ذاتها مع نوع تعريف واضح لـ CompassPoint. يمكن كتابة الحالات على سطر واحد عن طريق الفصل بينها بواسطة فاصلة ",": enum Planet { case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune }كيف أنشئ enum في لغة البرمجة Apple Swift؟
  23. نعم توفّر Swift ثلاث مستويات وصول مختلفة access levels للكيانات entities تكون هذه المستويات مرتبطة بالملف المصدري source file. المستويات: public access: يمكن الوصول للكيانات المعرفة كـpublic من أي ملف مصدري وكذلك في حال استيراد التعريف من أي وحدة أخرى. internal access: يمكن استخدام أي كيان معرف كـinternal ضمن الوحدة المعرف بها فقط ولا يمكن الوصول له من أي ملف مصدري خارج الوحدة. private access: يُقيّد استخدام الوحدة حيث يستخدم لإخفاء تفاصيل التنفيذ لجزء معين من الوظائف. هل تحوي لغة البرمجة Apple Swift على access modifier؟
  24. لحذف محرف من سلسلة نصية string في swift استخدم الدالة: removeAtIndex(_:)والتي تحذف محرف موجود في فهرس index محدد، مثلًا حذف آخر محرف "!" من سلسلة نصية string تحوي على جملة: "!Welcome to Swift". var welcome ="Welcome to Swift!" welcome.removeAtIndex(welcome.endIndex.predecessor()) // welcome now equals "Welcome to Swift"بالنسبة لحذف أكثر من محرف يمكن ذلك أيضًا أي يمكن حذف كلمة أو مجموعة حروف من سلسلة نصية string بتحديد عدد الفهارس التي تريد حذفها باستخدام الدالة: removeRange(_:)مثلًا حذف آخر كلمة في الجملة "Welcome to Swift" باستخدام الدالة removeRange let range = welcome.endIndex.advancedBy(-6)..<welcome.endIndex welcome.removeRange(range) // welcome now equals "Welcome to"ستصبح السلسة النصية "Welcome to". كيف أحذف محرف من سلسلة نصية string في Apple Swift؟
  25. أجل يمكنك اضافة محرف character إلى سلسلة نصية string في swift عند فهرس index محدد باستخدام الدالة: insert(_:atIndex:)ليكن لديك السلسلة النصية التالية: var welcome = "hello"وتريد اضافة المحرف "!" في آخر السلسلة النصية أي بعد الكلمة "hello" باستخدام الدالة: insert(_:atIndex:)استدعي الدالة insert بواسطة اسم المتغير welcome ومرر لها المعاملين 2 arguments وهما المحرف character الذي تريد اضافته ورقم الفهرس index الذي تريد وضع المحرف عنده كما في المثال التالي: var welcome = "hello" welcome.insert("!", atIndex: welcome.endIndex) // welcome now equals "hello!"يمكنك أيضًا اضافة كلمة أو سلسلة نصية أخرى إلى سلسلة نصية موجودة باستخدام الدالة: insertContentsOf(_:at:)مثلًا اضافة كلمة "there" إلى السلسلة النصية welcome عند الفهرس index قبل الأخير: welcome.insertContentsOf(" there".characters, at: welcome.endIndex.predecessor()) // welcome now equals "hello there!"ستصبح السلسة النصية !hello there كيف أُضيف محرف إلى سلسلة نصية string في Apple Swift؟
×
×
  • أضف...