این مقاله برداشتی از مقاله ای با همین عنوان در سایت 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 در کرج با شرکت سارگون تماس بگيريد.