اکستنشن ها (Swift Extensions)
«اکستنشن ها (Extensions)» یعنی افزودن قابلیت تازه به یک نوعِ موجود، بدون ارث بری. بنابراین کلاس یا ساختار قدیمی را دست نمی زنیم؛ فقط کمک یار اضافه می کنیم.
پراپرتی محاسبه ای و متد
با اکستنشن، برای هر نوعی، کمک متد و «پراپرتی محاسبه ای (Computed Property)» می سازیم. این چیزها فقط به همان نوع مربوط اند و کد را مرتب نگه می دارند.
extension String {
var isBlank: Bool {
return trimmingCharacters(in: .whitespacesAndNewlines).isEmpty;
}
func repeated(_ n: Int) -> String {
return String(repeating: self, count: n);
}
}
print(" ".isBlank);
print("Hi".repeated(3));
نکته: اکستنشن را مثل افزونه مرورگر ببین. همان برنامه است، اما توانایی جدید می گیرد.
پیوستن به پروتکل در اکستنشن
می توان «پروتکل (Protocol)» را بیرون از تعریف اصلی نوع اضافه کرد. بنابراین مسئولیت ها جدا می مانند و فایل خواناتر می شود.
protocol Describable {
func describe() -> String;
}
struct User {
let name: String;
}
extension User: Describable {
func describe() -> String {
return "User(\(name))";
}
}
let u = User(name: "Morgan");
print(u.describe());
گروه بندی بر اساس مسئولیت
نوع های بزرگ را با چند اکستنشن، بخش بندی کن. مثلاً یک اکستنشن برای فرمت، یکی برای شبکه.
struct Article {
let title: String;
let body: String;
}
extension Article {
var preview: String {
return String(body.prefix(40)) + "...";
}
}
extension Article {
static func fetchAll() -> [Article] {
return [];
}
}
گام های تمرینی
- روی
Intیک متدtimesبساز و بلاک اجرا کن. - روی
Arrayیک پراپرتیisNotEmptyاضافه کن. - یک نوع بساز و پیروی از یک پروتکل را در اکستنشن بده.
لینک های داخلی
برای ارتباط مفاهیم، صفحه اکستنشن های سوئیفت را کنار جنریک ها و پروتکل ها بخوان. همچنین بخش کنترل دسترسی مفید است.
جمع بندی سریع
- اکستنشن، قابلیت تازه می دهد.
- تعریف اصلی را تغییر نمی دهد.
- پروتکل ها را بیرون اضافه کن.
- کد را بر اساس مسئولیت تقسیم کن.