گروه مقاله : ios
تاريخ انتشار : 1396/05/17 - 15:25
كد :7767

پروتکل ها در سویفت چه هستند

در این مقاله به تعریف پروتکل ها و نحوه کاربرد آنها خواهیم پرداخت

آموزش برنامه نویسی سویفت

 

پروتکل ها مانند کلاس ها تعریف میشوند.

protocol MyFirstProtocol {

    // I do nothing

پروتکل ها متدها،صفات یا ویژگی ها و سایر نیازمندیها برای یک دستور خاص را تعریف می کنند. برای مثال پرتکل UITableViewDelegate تمام متدهای که میتوانند برای واکنش نشان دادن نسبت به رخدادهای کاربر و پیکربندی table view کارایی داشته باشند را لیست می کند.

نکته : شما میتوانید یک متد را با کلمه کلیدی @optional بصورت اختیاری تعریف کنید. به این ترتیب تمام متد های UITableViewDelegate بصورت اختیاری خواهند بود. اگر از کلمه @optional استفاده نکنید بکارگیری متد ها ضروری خواهند بود.کمپایلر درصورتی که کلاس با یک پروتکل مطابقت داشته و از متد های ضروری استفاده نکند یک ارور به شما خواهد داد.

یک کلاس میتواند با پروتکل مطابقت داشته باشد، این کار با افزودن یک کما بعد از نام کلاس انجام میشود. با این روش میتوان چندین پروتکل را با کاما از هم جدا کرد.

class AnotherSwiftClass: MyFirstProtocol, AnotherProtocol {

    ...

}

اگر کلاس از کلاس دیگری ارثبری داشته باشد، باید از نام superclass قبل از لیست پروتکل ها استفاده کنید.

 

class AnotherSwiftClass: AClass, MyFirstProtocol, AnotherProtocol {

    ...

}

نکته : پروتکل ها از همان ساختار متدهای نرمال استفاده می کنند، اما شما نمی توانید مقادیر پیشفرض را برای پارامترهای متد استفاده کنید.

در مثال زیر ما یک کلاس را تعریف کرده ایم که یک الگو را در IOS نماینگی می کند. این الگوی طراحی شده برای تعریف یک پروتکل بکار میرود:

protocol Targetable {

    var life: Int { get set }

    func takeDamage(damage: Int)

}

 

protocol Shootable {

    func shoot(target: Targetable)

}

 

class Pistol: Shootable {

    func shoot(target: Targetable) {

        target.takeDamage(1)

    }

}

 

class Shotgun: Shootable {

    func shoot(target: Targetable) {

        target.takeDamage(5)

    }

}

 

class Enemy: Targetable {

 

    var life: Int = 10

 

    func takeDamage(damage: Int) {

        life -= damage

        println("enemy lost \(damage) hit points")

 

        if life <= 0 {

            println("enemy is dead now")

        }

    }

}

 

class Player {

    var weapon: Shootable!

 

    init(weapon: Shootable) {

        self.weapon = weapon

    }

 

    func shoot(target: Targetable) {

        weapon.shoot(target)

    }

}

 

var terminator = Player(weapon: Pistol())

 

var enemy = Enemy()

 

terminator.shoot(enemy)

//> enemy lost 1 hit points

terminator.shoot(enemy)

//> enemy lost 1 hit points

terminator.shoot(enemy)

//> enemy lost 1 hit points

terminator.shoot(enemy)

//> enemy lost 1 hit points

terminator.shoot(enemy)

//> enemy lost 1 hit points

 

// changing weapon because the pistol is inefficient

terminator.weapon = Shotgun()

 

terminator.shoot(enemy)

//> enemy lost 5 hit points

//> enemy is dead now

 

 

براي بهره مندي از مشاوره تخصصي در زمینه برنامه نویسی ios در کرج با شرکت سارگون تماس بگيريد

نظرات كاربران :