Typealias: bu nədir, sintaksis və tətbiqi

Müəllif: IT Sectr Dərc olunub: 2026-06-20 Oxuma vaxtı: 7 dəq

Typealias — Swift-də yeni tip təyin etmədən mövcud tip üçün alternativ ad yaradan bəyannamədir. Alias kompilyasiya mərhələsində orijinal tipə tam ekvivalentdir — kompilyator typealias istifadə olunan hər yerdə orijinal tipi əvəz edir. Swift Language Guide (2025) məlumatına görə, typealias uzun siqnaturaları qısaltmaq, daxili tipləri protokollarda associatedtype vasitəsilə abstraksiya etmək və mürəkkəb generic parametrləri sadələşdirmək üçün tətbiq olunur. Tip sarıcısından (wrapper) fərqli olaraq, typealias tip təhlükəsizliyi əlavə etmir — bu sadəcə tip sistemi tərəfindən fərqləndirilməyən aliasdır.

Əsas məqamlar

  • Typealias — yeni tip yaratmayan mövcud tipin aliası; kompilyator onu orijinalla əvəz edir
  • Sintaksis: typealias NewName = ExistingType — istənilən səviyyədə bəyan edilə bilər (qlobal, lokal, tip daxilində)
  • Associatedtype — protokol daxilində typealias, protokol təsdiqləndikdə konkretləşən assosiativ tipi təyin edir
  • Generic siqnaturalar — typealias uzun parametrləri qısaldır: typealias Result = Swift.Result<Data, Error>
  • Closure tipləri — typealias oxunaqlılığı yaxşılaşdırır: typealias Handler = (Int) -> Void

Typealias nədir?

Typealias — Swift-də mövcud tip üçün alternativ ad təqdim edən bəyannamədir. Typealias bəyan edildikdən sonra yeni addan orijinal tipin gözlənildiyi hər yerdə istifadə etmək olar — kompilyator onları eyni hesab edir. Typealias semantik izolyasiya əlavə etmir: UserID tipinin (String üçün typealias) dəyərini String gözləyən funksiyaya xətasız ötürmək olar.

Typealias-in əsas məqsədləri — uzun adları qısaltmaq, tipin təyinatını sənədləşdirmək və konkret tətbiqi abstraksiya etməkdir. Məsələn, typealias JSON = [String: Any] lüğətin JSON strukturu kimi istifadə edildiyini açıq şəkildə göstərir, typealias Completion = (Result<Data, Error>) -> Void isə mürəkkəb closure siqnaturasını oxunaqlı tipə çevirir.

Swift.org (2025) məlumatına görə, typealias standart kitabxanada geniş istifadə olunur. Məsələn, StringString üçün typealiasdır (ixtisaslaşdırılmış Array<Character>), baxmayaraq ki Swift-in müasir versiyalarında bu tətbiq gizlidir. Void — boş tuple üçün typealiasdır (), bu da funksiya siqnaturalarını daha oxunaqlı edir.

Tipin semantikasını sənədləşdirmək üçün typealias istifadə edin, amma unutmayın: bu, eyni əsas tipin müxtəlif konsepsiyalarının qarışmasından qorumur. Tip təhlükəsiz ayrılması üçün sarıcılardan (struct wrapper) istifadə edin.

Sintaksis və görünmə sahələri

Typealias açar sözü typealias ilə bəyan edilir, ondan sonra yeni ad, bərabər işarəsi və mövcud tip gəlir. Əsas forma:

swift
typealias Name = ExistingType
typealias UserID = Int
typealias JSONDictionary = [String: Any]

Typealias-in görünmə sahəsi bəyan olunduğu yerlə müəyyən edilir:

SəviyyəNümunəGörünmə
Qlobaltypealias Name = StringBütün modul (access control nəzərə alınmaqla)
Tip daxilindəstruct User { typealias ID = Int }User.ID — tip vasitəsilə giriş
Funksiya daxilindəfunc f() { typealias Local = Int }Yalnız funksiya daxilində
Protokol daxilindəprotocol P { associatedtype T }Təsdiqləndikdə konkretləşir

Tip daxilində typealias (məsələn, User.ID) — əlaqəli aliasları qruplaşdırmaq üçün geniş yayılmış nümunədir. Bu, ad məkanını yaxşılaşdırır: Order.IDUser.ID — hər ikisi Int, lakin fərqli konsepsiyalar kimi oxunur. İç-içə typealias-ə User.ID vasitəsilə və ya tip məlumdursa nöqtə ilə daxil olmaq olar.

Closure tipləri üçün Typealias

Typealias-in ən çox yayılmış tətbiqlərindən biri — closure siqnaturalarını sadələşdirməkdir. Swift-də closure tipləri, xüsusilə Optional və generic parametrlərlə, ağır ola bilər. Typealias (Data?, Error?) -> Void ifadəsini oxunaqlı FetchResultHandler-ə çevirir:

swift
typealias FetchResultHandler = (Data?, Error?) -> Void

func fetchUser(id: Int, completion: FetchResultHandler) {
    // şəbək sorğusu
    completion(data, nil)
}

Ray Wenderlich Style Guide-ə görə, closure üçün typealias metod siqnaturalarının oxunaqlılığını artırır, xüsusilə deleqasiya protokollarında və callback nümunələrində. Ancaq həddindən artıq aliaslardan çəkinin — closure bir yerdə istifadə olunursa, onu inline bəyan etmək olar.

Swift standart kitabxanası bu üsuldan fəal istifadə edir. Məsələn, DispatchQueue.WorkItemDispatchWorkItem üçün typealiasdır, baxmayaraq ki kənardan ayrıca tip kimi görünür. Closure üçün typealias oxunaqlılıq alətidir, ondan sui-istifadə etməyin: modul başına 3–5 closure aliası — ağlabatan hədddir.

Typealias və generic parametrlər

Typealias generic parametrləri ehtiva edə bilər, ümumiləşdirilmiş tiplərin ixtisaslaşdırılmış versiyalarını yaradır. Bu, xüsusilə standart kitabxana və Combine-dən Result, Publisher və digər generic tiplərlə işləyərkən faydalıdır:

swift
typealias FetchResult = Result<Data, Error>
typealias AnyPublisherOfData = AnyPublisher<Data, Error>

func loadData() -> FetchResult {
    // məlumat yüklənməsi
}

Orijinal tipə yönləndirilən öz generic parametrləri ilə də typealias yaratmaq olar:

swift
typealias NetworkResult<T> = Result<T, NetworkError>

func fetchUser() -> NetworkResult<User> {
    // ...
}

Vacib qayda: typealias yeni generic məhdudiyyətlər (where clauses) əlavə edə bilməz — o, sadəcə parametrləri orijinal tipə yönləndirir. Əlavə məhdudiyyətlər lazımdırsa, generic struktur və ya sinif yaradın. Swift by Sundell (2024) məlumatına görə, generic ilə typealias — Combine, Result və async/await-dən fəal istifadə edən layihələrdə təkrarlanan siqnaturaları qısaltmaq üçün ideal üsuldur.

Protokollarda Associatedtype

Associatedtype — protokol daxilində bəyan edilmiş, assosiativ tipi təyin edən typealiasdır. Adi typealias-dan fərqli olaraq, associatedtype bəyannamə mərhələsində konkret tipə bağlı deyil — o, protokolu təsdiqləyən hər bir tip tərəfindən konkretləşdirilir:

swift
protocol Container {
    associatedtype Item
    var count: Int { get }
    mutating func append(_ item: Item)
}

struct IntBox: Container {
    typealias Item = Int
    // tətbiq
}

struct StringBox: Container {
    typealias Item = String
    // tətbiq
}

Associatedtype protokollara bəyannamə yerində konkret tip göstərmədən generic tiplərin çevikliyini verir. Bu, bir çox Swift nümunəsinin əsasını təşkil edir: Collection (Element), IteratorProtocol (Element), Identifiable (ID). Kompilyator associatedtype-i tətbiqdən avtomatik çıxara bilər, buna görə də açıq typealias Item = Int çox vaxt buraxılır — Swift Item-i append metodunun parametrindən Int kimi çıxarır.

Swift Evolution SE-0195 (2022) məlumatına görə, associatedtype ehtiva edən protokollarla işləmək üçün opaque result types (some Container) təqdim edildi — bu, dəyişən tipi kimi istifadə edilə bilməyən PAT (protocol with associated types) problemini həll etdi.

Typealias vs tip sarıcısı

Əsas fərq: typealias — sadəcə mövcud tip üçün başqa addır, sarıcı (wrapper) isə — orijinaldan semantik cəhətdən təcrid olunmuş yeni tipdir. Əgər typealias UserID = Int bəyan etsəniz, UserIDInt bir-birini əvəz edə bilər — Int gözləyən funksiya UserID-ni xətasız qəbul edər.

Sarıcı struct vasitəsilə yaradılır və həqiqi tip təhlükəsizliyi verir:

swift
struct UserID: RawRepresentable {
    let rawValue: Int
}

struct OrderID: RawRepresentable {
    let rawValue: Int
}

// Kompilyasiya xətası: UserID gözlənən yerdə OrderID ötürülə bilməz

Point-Free (2025) məlumatına görə, müxtəlif konsepsiyalar bir əsas tiplə təmsil olunduqda (UserID vs OrderID) sarıcılar üstünlük təşkil edir. Typealias, məqsəd təcrid olmadan oxunaqlılıq olduqda əsaslandırılır: uzun adı qısaltmaq, semantikanı sənədləşdirmək, associatedtype vasitəsilə tətbiqi abstraksiya etmək. Oxuma rahatlığı üçün typealias, tip təhlükəsizliyi üçün sarıcı seçin.

Tez-tez verilən suallar

Typealias associatedtype-dan nə ilə fərqlənir?

Typealias — konkret mövcud tip üçün aliasdır. Associatedtype protokol daxilində bəyan edilir və protokolu təsdiqləyən hər bir tip tərəfindən konkretləşdirilir — müxtəlif tiplər eyni protokol üçün fərqli associatedtype istifadə edə bilər.

Typealias yeni tip yaradırmı?

Xeyr, typealias — sadəcə alternativ addır. Kompilyator onu kompilyasiya mərhələsində orijinal tiplə əvəz edir. Yeni, semantik təcrid olunmuş tip yaratmaq üçün struct sarıcısı və ya rawValue ilə enum istifadə edin.

Typealias generic parametrlərlə istifadə edilə bilərmi?

Bəli, typealias generic parametrləri ehtiva edə bilər: typealias Result<T> = Swift.Result<T, Error>. Generic parametrlər orijinal tipə yönləndirilir. Where-məhdudiyyətləri əlavə etmək olmaz — bunun üçün generic strukturundan istifadə edin.

Typealias harada bəyan edilə bilər?

İstənilən səviyyədə: qlobal (faylda), tip daxilində (struct/class/enum), funksiya daxilində, protokol daxilində (associatedtype kimi). Görünmə sahəsi bəyannamə yeri ilə müəyyən edilir — qlobal typealias bütün modulda görünür, lokal — yalnız öz əhatə dairəsində.

Nə vaxt typealias əvəzinə sarıcı istifadə edilməlidir?

Typealias-i uzun adları qısaltmaq və semantikanı sənədləşdirmək üçün seçin, orijinal tiplə əvəzlənmə təhlükəsiz olduqda. Sarıcını (struct) — eyni əsas tipin müxtəlif konsepsiyalarının təsadüfən qarışmasının qarşısını almaq lazım olduqda: UserID vs ProductID.

Nəticə

  • Typealias — yeni tip yaratmadan mövcud tipin aliası; kompilyator onu orijinalla əvəz edir
  • Sintaksis: typealias NewName = ExistingType, görünmə sahələri — qlobal, tip daxilində, funksiya daxilində
  • Closure tipləri — typealias siqnaturaları sadələşdirir: typealias Handler = (Int) -> Void
  • Generic — typealias Result, Publisher və digər ümumiləşdirilmiş tipləri qısaltmaq üçün generic parametrləri ehtiva edə bilər
  • Associatedtype — protokol daxilində typealias, hər təsdiqləyən tip tərəfindən konkretləşdirilir
  • Sarıcıdan fərqi: typealias tipləri təcrid etmir — UserID və Int əvəzlənə bilər; sarıcı (struct) həqiqi tip təhlükəsizliyi verir
  • Ən yaxşı təcrübə: oxunaqlılıq üçün typealias, semantik kompilyasiya səhvlərinin qarşısını almaq üçün sarıcılardan istifadə edin

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun