English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

الطرق Swift

الطريقة في Swift هي دالة مرتبطة ببعض الأنواع المحددة

في Objective-C، الفئات هي النوع الوحيد الذي يمكنه تعريف الطريقة. ولكن في Swift، يمكنك ليس فقط اختيار ما إذا كنت ترغب في تعريف فئة/مبنى/تصنيف، بل يمكنك أيضًا تعريف الطريقة بسهولة على النوع الذي أنشأته (فئة/مبنى/تصنيف).

مثال طريقة

في لغة Swift، تكون الطرق الأمثلة مملوكة لأمثلة معينة من الفئات أو الأنواع أو الأنواع.

يقدم الطرق الأمثلة ما يلي:

  • يمكن الوصول إلى وتعديل خصائص الأمثلة.

  • يقدم الميزات المتعلقة بمصدر الأمثلة.

يُكتب الطرق الأمثلة بين الأسطر الكبيرة للنوع ({}).

يمكن للطرق الأمثلة الوصول بشكل تلقائي إلى جميع الطرق والأصناف الأخرى للنوع الذي تنتمي إليه.

يمكن استدعاء الطرق الأمثلة فقط من خلال أمثلة معينة من نفس الفئة.

لا يمكن استدعاء الطرق الأمثلة بدون الاستناد إلى الأمثلة الموجودة.

النحو

func funcname(Parameters) -> returntype
{
    بند البيان1
    بند البيان2
    ……
    بند البيان N
    return parameters
}

مثال علىpline

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 يحدد ثلاث طرق امثلة:

  • increment يتراوح معدل الحساب بناءً على 1.
  • incrementBy(amount: Int) يتراوح معدل الحساب بناءً على قيمة عددية محددة.
  • reset أعيد تعيين معدل الحساب إلى 0.

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 متطابقة تمامًا مع هذا المثال نفسه.

يمكنك استخدام خاصية 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 في الطريقة القابلة للتعديل

يمكن للطرق القابلة للتعديل تعيين الخاصية المدمجة 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