گروه مقاله : ios
تاريخ انتشار : 1396/05/15 - 12:32
كد :7762

چگونگی تست هویت متغییرها در سویفت

در این مقاله علاوه بر توضیح نحوه کنترل تساوی دو عنصر درباره کلاس ها و ارث بری کلاس ها صحبت خواهیم کرد.

برنامه نویسی ios در کرج

اپراتورهای هویت

این مقاله ترجمه ای از سایت Apple Docs تحت عنوان Testing for identity میباشد. ولی قبل از اینکه به ترجمه این مقاله بپردازیم این نکته را در نظر داشته باشید:

ما در کلاس ها و Structure ها از انواع ارجاعات شمال رفرنس و کپی صحبت کردیم در این مقاله اپل قصد دارد نحوه تائید درستی ساختار نهایی را به ما بیاموزد. این کار براحتی قابل انجام است. در نرم افزار سویفت ما اپراتوری داریم که دارای سه علامت مساوی است و صحت تساوی داده ها را تائید می کند. همانطور که میدانید اگر از یک تساوی استفاده کنیم مقدار سمت راست تساوی در مقدار سمت چپ تساوی ریخته میشود. اگر از دو علامت مساوی استفاده کنیم ، برابری مقدار داده ها بدون توجه به ساختار آنها چک می شود. و اگر از سه مساوی استفاده کنیم هم مقدار داده و هم یکی بودن ساختار آنها برای تساوی کنترل میگردد.

به مثال های زیر نگاه کنید:

Identical to (===)
Not identical to (!==)

در زیر ما یک لیست از کاربران یک بازی را گرداوری می کنیم.برخی از کاربران را درون متغیری به نام host قرار داده و برخی امکانات را میتوانیم برای این کابران استثناء کنیم.

 

var users: User[] = [ ... ] // User[] means Array of Users

var host = /* some user */

 

 

for user in users {

    if user === host {

        // host logic here

        println("this is the host")

    } else {

        // guest logic here

        println("this is a guest")

    }

}

در این مثال سویفت اجازه استفاده از دو علامت مساوی را نمی دهد و دلیلی برای نگرانی از بابت باگ های که ممکن است بخاطر عدم تساوی وجود داشته باشد نباشید.

 

ارث بری کلاس ها

یک کلاس میتواند متدها ، ویژگی ها، و اشیاءدیگری را از سایر کلاس ها به ارث ببرد. وقتی که یک کلاس از کلاس دیگری ارث میبرد به نام Subclass  شناخته میشود. کلاسی که به کلاس دیگر ارث میدهد superclass نامیده میشود. ارثبری ساختاری است که با سایر کلاس ها در سویفت متفاوت است:

 

class AClass {

    func doSomething() {

        println("Hello from AClass")

    }

}

 

class Subclass: AClass  {

}

 

let base_object = AClass()

base_object.doSomething()

//> Hello from AClass

 

 

let enhanced_object = Subclass()

enhanced_object.doSomething()

// > Hello from AClass

 

بازنویسی عناصر کلاس

شما میتوانید متدهای را برای رفتاری خاص بازنویسی کنید. برای باز نویسی متد، واژه override را قبل از تعریف متد درج کنید:

class AClass {

    func doSomething() {

        println("Hello from AClass")

    }

}

 

class Subclass: AClass  {

    override func doSomething() {

        println("Hello from Subclass")

    }

}

 

let base_object = AClass()

base_object.doSomething()

//> Hello from AClass

 

 

let enhanced_object = Subclass()

enhanced_object.doSomething()

//> Hello from Subclass

 

شما میتوانید از واژه super برای فراخوانی هر متدی از کلاس superclass استفاده کنید.

...

 

class Subclass: AClass  {

 

    override func doSomething() {

        super.doSomething()

 

        println("Hello from Subclass")

    }

}

 

let enhanced_object = Subclass()

enhanced_object.doSomething()

//> Hello from AClass

//> Hello from Subclass

کلاس های Base

کلاسی که توسط کلاس های دیگر به ارث برده نمی شود را base class مینامیم مثال:

class User {

    var name: String!

    var age: Int!

 

    init(name: String, age: Int) {

        self.name = name

        self.age = age

    }

}

 

کلاس ها در سیستم عامل ios و Mac OS معمولا از NSObject ارث میبرند ، پیشنهاد میشود که برای ایجاد یک کلاس جدید از subclass NSObject استفاده کنید:

کلاس های سویفت که  subclasses کلاس NSObject هستند:

این کلاس ها جزئ کلاس های Objective-C میباشند.

استفاده از متد objc_msgSend() برای فراخوانی اغلب متدهای این کلاس ها

فراخوانی متادیتا Objective-C runtime برای بکارگیری بیشتر متد ها

کلاس های سویفت که زیر کلاس NSObject نیستند:

این کلاس ها از کلاس های Objective-C بوده ولی بکارگیری آنها تنها برای متدهای NSObject کاربرد دارد.

از متد objc_msgSend() برای فراخوانی متد های این کلاس ها بطور پیشفرض نمی توان استفاده کرد.

عدم استفاده از متادیتا Objective-C runtime برای بکارگیری این کلاس ها بطور پیشفرض

برای جلوگیری از طولانی شدن این بحث پروتکل ها را در مقاله دیگری توضیح خواهیم داد.

 

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

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