English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
الطريقة في Swift هي دالة مرتبطة ببعض الأنواع المحددة
في Objective-C، الفئات هي النوع الوحيد الذي يمكنه تعريف الطريقة. ولكن في Swift، يمكنك ليس فقط اختيار ما إذا كنت ترغب في تعريف فئة/مبنى/تصنيف، بل يمكنك أيضًا تعريف الطريقة بسهولة على النوع الذي أنشأته (فئة/مبنى/تصنيف).
في لغة Swift، تكون الطرق الأمثلة مملوكة لأمثلة معينة من الفئات أو الأنواع أو الأنواع.
يقدم الطرق الأمثلة ما يلي:
يمكن الوصول إلى وتعديل خصائص الأمثلة.
يقدم الميزات المتعلقة بمصدر الأمثلة.
يُكتب الطرق الأمثلة بين الأسطر الكبيرة للنوع ({}).
يمكن للطرق الأمثلة الوصول بشكل تلقائي إلى جميع الطرق والأصناف الأخرى للنوع الذي تنتمي إليه.
يمكن استدعاء الطرق الأمثلة فقط من خلال أمثلة معينة من نفس الفئة.
لا يمكن استدعاء الطرق الأمثلة بدون الاستناد إلى الأمثلة الموجودة.
func funcname(Parameters) -> returntype { بند البيان1 بند البيان2 …… بند البيان N return parameters }
import Cocoa class Counter { var count = 0 func increment() { count += 1 } func incrementBy(amount: Int) { count += amount } func reset() { count = 0 } } // قيمة الحساب الابتدائية هي 0 let counter = Counter() // قيمة الحساب الآن هي 1 counter.increment() // قيمة الحساب الآن هي 6 counter.incrementBy(amount: 5) print(counter.count) // قيمة الحساب الآن هي 0 counter.reset() print(counter.count)
نتيجة تنفيذ البرنامج أعلاه هي:
6 0
تعريف الفئة Counter يحدد ثلاث طرق امثلة:
Counter هذا الفئة أعلنت أيضًا عن خاصية متغيرة. countللحفاظ على تتبع قيمة معدل الحساب الحالي.
يمكن للمعاملات في الوظائف في Swift أن تحمل في نفس الوقت اسمًا محليًا (للإستخدام داخل جسم الوظيفة) واسمًا خارجيًا (للإستدعاء الوظيفة).
الطرق في Swift تشبه جداً الطرق في Objective-C. مثل Objective-C، يُستخدم الاسم في Swift عادةً كمقدم للاسم الأول للمعامل، مثل: مع، ل، بواسطة، إلخ.
Swift الافتراضي يمنح فقط الاسم المحلي للمعامل الأول في الطريقة; الافتراضي يمنح الاسم العام للمعاملين الثاني واللاحقين.
في هذا المثال، 'no1' يتم إعلانه كاسم محلي في Swift. 'no2' تستخدم للإعلان بشكل عام ويمكن الوصول إليها عبر البرنامج الخارجي.]}
import Cocoa class division { var count: Int = 0 func incrementBy(no1: Int, no2: Int) { count = no1 / no2 print(count) } } let counter = division() counter.incrementBy(no1: 1800, no2: 3) counter.incrementBy(no1: 1600, no2: 5) counter.incrementBy(no1: 11000, no2: 3)
نتيجة تنفيذ البرنامج أعلاه هي:
600 320 3666
نقوم بالاضطلاع بإضافة اسم خارجي الأول لتقديم هذا الاسم المحلي كاسم خارجي (قبل Swift 2.0 كان يستخدم الرمز # ).
بدلاً من ذلك، يمكننا أيضًا استخدام العلامة الحرفية ( _) لتعيين ثاني وأكبر عدد من المعلمات دون تقديم اسم خارجي.import Cocoa class multiplication { var count: Int = 0 func incrementBy(first no1: Int, no2: Int) { count = no1 * no2 print(count) } } let counter = multiplication() counter.incrementBy(first: 800, no2: 3) counter.incrementBy(first: 100, no2: 5) counter.incrementBy(first: 15000, no2: 3)
نتيجة تنفيذ البرنامج أعلاه هي:
2400 500 45000
كل نموذج من أنواع له خاصية مضمنة تسمى self، و self متطابقة تمامًا مع هذا المثال نفسه.
يمكنك استخدام خاصية self المضمنة في طريقة مثال للاشارة إلى هذا المثال الحالي.
import Cocoa class calculations { let a: Int let b: Int let res: Int init(a: Int, b: Int) { self.a = a self.b = b res = a + b print("Self 内: \(res)") } func tot(c: Int) -> Int { return res - c } func result() { print("النتيجة هي: \(tot(c: 20))") print("النتيجة هي: \(tot(c: 50))") } } let pri = calculations(a: 600, b: 300) let sum = calculations(a: 1200, b: 300) pri.result() sum.result()
نتيجة تنفيذ البرنامج أعلاه هي:
Self في الداخل: 900 Self في الداخل: 1500 النتيجة هي: 880 النتيجة هي: 850 النتيجة هي: 1480 النتيجة هي: 1450
هيكل Swift و مصفوفة هي أنواع قيم. عادةً، لا يمكن تعديل خصائص نوع القيمة في طريقة الديموغرافيا.
إذا كنت بحاجة حقًا إلى تعديل خصائص هيكل أو مصفوفة في طريقة محددة، يمكنك اختيار التغيير (mutating) لهذه الطريقة، ثم يمكن للطريقة تعديل خصائصها من الداخل؛ وهي أيضًا ستحافظ على التغييرات التي أجريتها عند انتهاء الطريقة.
يمكن للطريقة أيضًا تعيين الخاصية المدمجة self لشكل جديد تمامًا، والذي سيحل محل الشكل الأصلي عند انتهاء الطريقة.
import Cocoa struct area { var length = 1 var breadth = 1 func area() -> Int { return length * breadth } mutating func scaleBy(res: Int) { length *= res breadth *= res print(length) print(breadth) } } var val = area(length: 3, breadth: 5) val.scaleBy(res: 3) val.scaleBy(res: 30) val.scaleBy(res: 300)
نتيجة تنفيذ البرنامج أعلاه هي:
9 15 270 450 81000 135000
يمكن للطرق القابلة للتعديل تعيين الخاصية المدمجة self لشكل جديد تمامًا.
import Cocoa struct area { var length = 1 var breadth = 1 func area() -> Int { return length * breadth } mutating func scaleBy(res: Int) { self.length *= res self.breadth *= res print(length) print(breadth) } } var val = area(length: 3, breadth: 5) val.scaleBy(res: 13)
نتيجة تنفيذ البرنامج أعلاه هي:
39 65
الطريقة المثالية هي الطريقة التي يتم استدعاؤها من قبل مثال من النوع، يمكنك أيضًا تعريف طريقة يتم استدعاؤها من قبل النوع نفسه، وتسمى هذه الطريقة طريقة النوع.
تُعلن طرق الهياكل (الشكل والقائمة) النوعية، بوضع كلمة المفتاح static قبل كلمة func في بدء الطريقة. قد تستخدم كلمة المفتاح class لسماح للفرعيات بتحرير تنفيذ الوالدة.}
تستخدم طرق النوع والنصوص مثل بناء النقاط (.).
import Cocoa class Math { class func abs(number: Int) -> Int { if number < 0 { return (-number) } else { return number } } } struct absno { static func abs(number: Int) -> Int { if number < 0 { return (-number) } else { return number } } } let no = Math.abs(number: -35) let num = absno.abs(number: -5) print(no) print(num)
نتيجة تنفيذ البرنامج أعلاه هي:
35 5