گروه مقاله : ios
تاريخ انتشار : 1396/05/12 - 10:22
كد :7757

آغازگرها در سویفت

در این مقاله ما به تعریف آغازگرها در سویفت خواهیم پرداخت

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

این مقاله برداشتی از مقاله ای با همین عنوان در سایت Apple’s Documentation میباشد.

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

شما از این پردازش مقادیر اولیه با تعریف آغازگرها استفاده خواهید کرد، اینکار مانند متدهای ویژه است که میتوانند برای ایجاد یک نمونه از یک نوع فراخوانی شوند.

برخلاف آغازگرها در Objective-C آغازگرها در سویفت مقداری را بازنخواهند گرداند، آغازگرها در سویفت قوانینی هستند که مطمئن میشوند یک نمونه جدید از یک نوع، قبل از اینکه برای اولین بار بکار رود به درستی مقدار دهی شده است.

نکته اینکه اگر شما یک مقدار پیشفرض را در مثال زیر برای X و Y تعیین نکنید کد های زیر سه پیغام خطا به شما خواهند داد:

class Point { // Class 'Point' has no initializers

    var x // Type annotation missing in pattern

    var y // Type annotation missing in pattern

}

اگر بخواهیم خطاها را برطرف کنیم، باید کدهای بالا را به این صورت ویرایش کنیم:

class Point { // Class 'Point' has no initializers

    var x: Double

    var y: Double

}

برای ایجاد یک آغازگر از عبارت کلیدی init به همراه پارامترهای مورد نیاز برای مقداردهی اولیه استفاده کنید.

class Point {

    var x: Float

    var y: Float

 

    init(x: Float, y: Float) {

        self.x = x

        self.y = y

    }

}

// Example usage

var point = Point(x: 100, y: 200)

 

کار دیگری که میتوانیم انجام دهیم تعیین نوع برای ویژگی های اختیاری است. برای تنظیم یک نوع اختیاری که تازه اضافه کرده ایم بعد از تعریف نوع ، اگر ویژگی آن مشخص باشد برای آن مقدار ویژگی مقدار nil را دریافت می کند.

class Point {

    var x: Float?

    var y: Float?

 

}

var point = Point() // both the x and y properties are now set to nil

point.x = 100.0

point.y = 200.0

ایجاد یک آغازگر سفارشی

بگذارید فرض کنیم، از یک کلاس به نام User در پروژه خود استفاده می کنیم که داری متغییر های رشته ایfirstName, lastName   و bio میباشد.

class User {

    var firstName: String?

    var lastName: String?

    var bio: String = "I Swift!"

}

var user = User() // user = { firstName: nil, lastName: nil, bio: "I Swift!"}

 

وقتی یک کاربر یک اکانت ایجاد کند فیلد های نام و نام خانوادگی باید پرشوند ولی فیلد bio اختیاری است . در این مثال ما دو نوع متغییر برای تعریف یک کاربر داریم. اگر بخواهیم برای هر کدام از این متغییرها یک آغازگر ایجاد کنیم طبق قاعده زیر عمل می کنیم:

class User {

    var firstName: String

    var lastName: String

    var bio: String = "I Swift!"

    // no bio provided

    init(firstName: String, lastName: String) {

 

        self.firstName = firstName

        self.lastName = lastName

    }

 

    // bio provided

    init(firstName: String, lastName: String, bio: String) {

        self.firstName = firstName

        self.lastName = lastName

        self.bio = bio

    }

}

 

var me = User(firstName: "Andrei", lastName: "Puni")

// me = { firstName: "Andrei", lastName: "Puni", bio: "I Swift!"}

 

var silviu = User(firstName: "Silviu", lastName: "Pop", bio: "I f**ing Swift!!!")

// silviu = { firstName: "Silviu", lastName: "Pop", bio: "I f**ing Swift!!!"}

یک نکته دیگر ما میتوانیم مقادیر را بصورت فشرده مقدار دهی اولیه کنیم به مثال زیر نگاه کنید:

class User {

    var firstName: String

    var lastName: String

    var bio: String

 

    init(firstName: String, lastName: String, bio: String = "I Swift!") {

        self.firstName = firstName

        self.lastName = lastName

        self.bio = bio

    }

}

 

var me = User(firstName: "Andrei", lastName: "Puni")

// me = { firstName: "Andrei", lastName: "Puni", bio: "I Swift!"}

var silviu = User(firstName: "Silviu", lastName: "Pop", bio: "I f**ing Swift!!!")

// silviu = { firstName: "Silviu", lastName: "Pop", bio: "I f**ing Swift!!!"}

 

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

 

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