Published on

Swift-da typealias

Authors

typealias β€” mavjud turga yangi nom berish imkonini beruvchi qurilma. Nomi murakkab eshitilsa-da, aslida juda sodda.


Muammo β€” takroriy struct

Faraz qilaylik, ilovada MovieModel struct-i bor:

struct MovieModel {
    let title: String
    let director: String
    let count: Int
}

Bu model filmlar uchun ishlatiladi. Endi TV-seriallar ham qo'shmoqchisiz β€” va ularda ham xuddi shu maydonlar: sarlavha, rejissyor, ko'rishlar soni.

Birinchi fikr β€” yangi struct yaratish:

struct TVModel {
    let title: String
    let director: String
    let count: Int
}

Bu ishlaydi, lekin ikki muammo bor:

  1. MovieModel asosida yozilgan funksiyalar TVModel bilan ishlamaydi β€” funksiyalarni qayta yozish kerak
  2. MovieModel-ga o'zgarish kiritilsa, TVModel-ga ham alohida kiritish kerak β€” takroriy ish

Yechim β€” typealias

struct MovieModel {
    let title: String
    let director: String
    let count: Int
}

typealias TVModel = MovieModel

Endi TVModel β€” bu MovieModel-ning boshqa nomi xolos. Ikkalasi bir xil tur, bir xil initializer, bir xil funksiyalar bilan ishlaydi:

let film = MovieModel(title: "Sarlavha", director: "Joe", count: 5)
let serial = TVModel(title: "TV sarlavha", director: "Emily", count: 10)

print(film.title)   // Sarlavha
print(serial.title) // TV sarlavha

MovieModel-ga qo'shilgan har qanday o'zgarish TVModel-ga ham avtomatik ta'sir qiladi β€” chunki ular aslida bitta tur.


Boshqa misol β€” User va Customer

Katta ilovalarda bir xil turni turli kontekstlarda farqli nom bilan ishlatish qulay bo'lishi mumkin:

struct User {
    let name: String
    let email: String
}

typealias Customer = User

Endi Customer β€” User-ning boshqa nomi. Kod o'quvchilar uchun kontekstga mos nom ishlatiladi, lekin aslida bir xil tur.


typealias sintaksisi

typealias YangiNom = MavjudTur

Har qanday turga alias berish mumkin β€” struct, class, enum, protokol, hatto murakkab generik turlar uchun ham:

// Oddiy misol
typealias StringArray = [String]

// Murakkab tur uchun (keyingi videoda ko'riladi)
typealias Handler = (Result<String, Error>) -> Void

Xulosa

Bu videoda o'rganildi:

  • typealias β€” mavjud turga yangi nom beradi, yangi tur yaratmaydi
  • Bir xil turni ikki marta struct sifatida yozish o'rniga typealias ishlatish mumkin
  • typealias bilan yaratilgan nom va asl tur β€” bir xil tur, bir xil funksiyalar, bir xil initializer
  • Amalda kam ishlatiladi, lekin keyingi videoda asinxron kod bilan birga ko'rish mumkin bo'lgan holat ko'rsatiladi

Keyingi videoda typealias amaliy ishlatilishi β€” asinxron funksiyalar bilan birga ko'rsatiladi.

Buy mea coffee