struct — bu nədir, əsas anlayışlar və Swift-də sintaksis

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

Struct — Swift dilində tip-dəyər (value type) olub, nüsxələri kod hissələri arasında ötürülərkən surəti çıxarılır. Siniflərdən fərqli olaraq, strukturlar miras almır, lakin protokolları tətbiq edir, xassə və metodları ehtiva edir və ARC olmadan proqnozlaşdırılan yaddaş idarəetməsini təmin edir. Swift Programming Language Guide, 2026-ya görə, struct Swift-in əsas tikinti blokudur — hətta standart Int, String, Array və Dictionary tipləri strukturlar kimi tətbiq edilmişdir. Dil məlumatların modelləşdirilməsi üçün strukturları prioritet seçim kimi tövsiyə edir.

Əsas məqamlar

  • Struct — Swift-də tip-dəyərdir, mənimsətmə zamanı surəti çıxarılır və qiymət olaraq ötürülür, referans olaraq yox.
  • Copy-on-Write — optimallaşdırma, burada məlumatların faktiki surətinin çıxarılması yalnız dəyər dəyişdikdə baş verir, mənimsətmə zamanı yox.
  • Mutating — strukturun xassələrini dəyişən metodlar üçün tələb olunan açar söz.
  • Protokollar — strukturlar miras olmadan çevikliyi təmin edən protokolları və genişləndirmələri tətbiq edə bilər.
  • Təhlükəsizlik — referans dövrlərinin olmaması strukturları çoxiplikli kod və məlumat modelləri üçün üstün edir.

Swift-də struct nədir?

Struct (struktur) — Swift-də əlaqəli xassə və metodları vahid varlıqda qruplaşdıran mürəkkəb məlumat tipidir. Siniflərdən fərqli olaraq, strukturlar value types-dır: funksiyaya ötürüldükdə və ya yeni dəyişənə mənimsədildikdə orijinal obyektə referans deyil, strukturun müstəqil surəti yaradılır.

Swift bütün primitiv tiplər üçün strukturlardan istifadə edir: Int, Double, String, Bool, Array, Dictionary və Set. Bu o deməkdir ki, hətta əsas Int ədədi də struktur kimi davranır — mənimsətmə zamanı surət yaradılır. Tərtibatçı ixtiyari xassə və metod dəsti ilə öz strukturunu təyin edə bilər.

Swift Evolution (SE-0143)-ə görə, standart tiplərin strukturlar kimi tətbiq edilməsi qərarı performans və proqnozlaşdırıla bilmə ilə əsaslandırılmışdır. Value types referans dövrləri yaratmır, ARC referans sayılmasını tələb etmir və surətin dəyişdirilməsinin orijinala təsir etməyəcəyinə zəmanət verir — bu, çoxiplikli ssenarilərdə məlumatların dəyişməzliyi üçün kritik əhəmiyyət daşıyır.

Struct value type kimi

Value type semantics — struct ilə class arasındakı əsas fərqdir. Bir strukturu yeni dəyişənə mənimsədikdə və ya funksiyaya ötürdükdə, Swift bütün məlumatların müstəqil surətini yaradır. Surətdə edilən hər hansı dəyişiklik orijinala təsir etmir ki, bu da referans tipləri üçün xarakterik olan yan təsirləri aradan qaldırır.

swift
// Value type semantikası nümunəsi
struct Point {
    var x: Double
    var y: Double
}

var p1 = Point(x: 10, y: 20)
var p2 = p1        // p2 p1-in müstəqil surətidir
p2.x = 99            // Yalnız p2 dəyişir
print(p1.x)         // 10 — p1 dəyişməz
print(p2.x)         // 99

Copy-on-Write optimallaşdırması

Swift surətin çıxarılmasını optimallaşdırmaq üçün Copy-on-Write (COW) istifadə edir. Bir neçə dəyişən bir struktura istinad edirsə, lakin heç biri məlumatları dəyişdirmirsə, faktiki surət çıxarma baş vermir. Swift ilk mutasiyaya qədər dəyişənlər arasında yaddaşı paylaşır — bundan sonra həqiqi surət yaradılır. Bu, lazımsız ayırma əməliyyatlarının qarşısını alır və kolleksiyalarla işi sürətləndirir.

Dəyişkənlik və mutating metodları

Susmaya görə, struktur metodları onun xassələrini dəyişə bilməz — Swift dəyişiklik edən metodlar üçün açıq şəkildə mutating göstərilməsini tələb edir. Bu məhdudiyyət təsadüfi mutasiyadan qoruyur və kodu proqnozlaşdırılan edir: metod mutating kimi qeyd edilməyibsə, strukturu dəyişməyəcəyinizə zəmanət verilir.

Mutating hərəkətdə

Metoddan əvvəl mutating açar sözünü əlavə etdikdə, Swift strukturun xassələrinə yeni dəyərlər yazmaq imkanı əldə edir. Əslində, metod hətta self = vasitəsilə struktur nümunəsini tamamilə yenisi ilə əvəz edə bilər. Bu mexanizm, məsələn, Option və Result tiplərində istifadə olunur.

swift
// Mutating metodu olan struct
struct Counter {
    private var value: Int = 0

    // Mutating metodu — xassələri dəyişə bilər
    mutating func increment() {
        value += 1
    }

    // Mutating metodu self-i tamamilə əvəz edə bilər
    mutating func reset() {
        self = Counter()
    }

    // Non-mutating metodu — yalnız oxumaq üçün
    func currentValue() -> Int {
        return value
    }
}

var counter = Counter()
counter.increment()
print(counter.currentValue())  // 1
counter.reset()
print(counter.currentValue())  // 0

Mutating qaydaları: struktur var ilə elan edilməlidir, let ilə yox — sabit strukturda mutating metodu çağırmaq olmaz. Kompilyator bunu qurma mərhələsində yoxlayır: let sabitində mutating metodu çağırmaq cəhdi kompilyasiya xətasına səbəb olacaq.

Struct vs Class: müqayisə

Struct və class arasında seçim — Swift-də əsas qərarlardan biridir. Hər iki tip xassələr, metodlar, başlatıcılar ehtiva edə və protokolları tətbiq edə bilər, lakin yaddaş semantikası, miras və həyat dövrü idarəetməsində prinsipial fərqlərə malikdir.

Xüsusiyyətstructclass
TipValue type (surəti çıxarılır)Reference type (referans)
MirasDəstəkləmirDəstəkləyir
ARC / referans sayılmasıTələb olunmurARC tələb olunur
DeinitializasiyaDəstəkləmirdeinit dəstəkləyir
Sabitdə xassələrin dəyişdirilməsiYalnız var vasitəsiləlet vasitəsilə mümkündür (referans sabitdir)
Tip yönləndirməDəstəkləmirDəstəkləyir
Kolleksiyalarda saxlanmaBirbaşa saxlanılır (dəyər)Referans kimi saxlanılır (göstərici)

Strukturlar məlumatlar miras tələb etmədikdə, ümumi eyniliyə malik olmamalı olduqda (məsələn, koordinatlar, ölçülər, konfiqurasiya) və modullar arasında ötürüldükdə üstünlük təşkil edir. Siniflər UI komponentləri (UIView, UIViewController), singleton və ümumi eyniliyə malik obyektlər üçün seçilir.

Nə vaxt struct seçməli

Apple Swift-də məlumatların modelləşdirilməsi üçün struct-dan susmaya görə tip kimi istifadə etməyi tövsiyə edir. Strukturlar proqnozlaşdırılan surət çıxarma semantikası və referans sayılmasına əlavə yükün olmaması sayəsində əksər ssenarilər üçün uyğundur. Tipik halları nəzərdən keçirək.

Miras olmadan məlumat modelləri

Əgər varlıq miras ehtiyacı olmadan məlumat ehtiva edirsə (Product, User, Order, Point), struct istifadə edin. Kompilyator avtomatik olaraq memberwise initializer yaradır — init-i əl ilə yazmağa ehtiyac yoxdur. Equatable və Hashable da bütün xassələri bu protokollara uyğun gələn strukturlar üçün avtomatik tətbiq edilir.

Dəyişməz (immutable) məlumatlar

Yaradıldıqdan sonra dəyişməyən konfiqurasiyalar, parametrlər və bayraqlar üçün struct class-dan daha üstündür. Sabit (let) struktur bütün iç-içə sahələrin dəyişməzliyinə zəmanət verir — class-da bu yalnız referansa aiddir, obyektin məzmununa deyil.

Çoxiplikli kod

Strukturlar value semantics sayəsində çoxiplikli mühitdə təhlükəsizdir. Hər bir axın müstəqil məlumat surəti alır və digər axınlara təsir etmir. Value types üçün axınlar arasında məlumat yarışı mümkün deyil, bu da struct-u SwiftUI-də modellər üçün üstün seçim edir (ObservableObject class tələb edir, lakin @State struct istifadə edir).

swift
// Struct-ın məlumat modeli üçün istifadəsi nümunəsi
struct User: Codable, Identifiable {
    let id: UUID
    var name: String
    var email: String
    var isPremium: Bool

    // Computed xassə — non-mutating
    var displayName: String {
        isPremium ? "\(name) ⭐️" : name
    }
}

// Avtomatik memberwise başlatıcı
let user = User(
    id: UUID(),
    name: "Alice",
    email: "alice@example.com",
    isPremium: true
)

// Kopyalama çoxipliklik üçün təhlükəsizdir
var userCopy = user
userCopy.isPremium = false
// user.isPremium true olaraq qalır

Class-dan miras (UIKit/AppKit komponentləri), ümumi eynilik (delegate, observer) və ya idarə olunan obyekt həyat dövrü (deinit) lazım olduqda istifadə edin. Qalan hər şey üçün — struct.

Tez-tez verilən suallar

Swift-də struct nədir?

Struct Swift-də — kod hissələri arasında ötürülərkən surəti çıxarılan tip-dəyərdir (value type). Strukturlar xassələr, metodlar, başlatıcılar ehtiva edə və protokolları tətbiq edə bilər. Swift-in əsas tipləri (Int, String, Array) strukturlar kimi tətbiq edilmişdir.

Swift-də struct və class arasında nə fərq var?

Struct — value type (mənimsətmə zamanı surəti çıxarılır), mirası dəstəkləmir və ARC tələb etmir. Class — reference type (referans vasitəsilə ötürülür), mirası, deinitializasiyanı və referans sayılmasını dəstəkləyir. Tərtibatçılar struct-u susmaya görə tip kimi tövsiyə edir.

Swift struct-da mutating nədir?

Mutating — struktur metodunun onun xassələrini dəyişə biləcəyini göstərən açar sözdür. Mutating olmadan kompilyator sahələrin modifikasiyasını qadağan edir. Mutating metodları yalnız var ilə elan edilmiş dəyişənlərdə çağırmaq olar, let ilə yox.

Swift-də Copy-on-Write nədir?

Copy-on-Write (COW) — Swift-də strukturlar üçün optimallaşdırmadır, burada məlumatların faktiki surətinin çıxarılması ilk mutasiya anına qədər təxirə salınır. Bütün dəyişənlər strukturu yalnız oxuduqca, onlar bir yaddaş sahəsini paylaşır. Bu, böyük kolleksiyalarla iş zamanı performansı artırır.

Swift-də nə vaxt struct, nə vaxt class istifadə etməli?

Struct-dan mirassız məlumat modelləri, konfiqurasiyalar, DTO və çoxiplikli ssenarilər üçün istifadə edin. Class-dan UIKit/AppKit UI komponentləri, singleton, ümumi eyniliyə malik varlıqlar (delegate, observer) və deinitializasiya tələb edən obyektlər üçün istifadə edin.

Nəticə

  • Struct — Swift-də tip-dəyərdir (value type), mənimsətmə zamanı surəti çıxarılır, surətlər arasında yan təsirlər olmadan proqnozlaşdırılan davranış təmin edir.
  • Copy-on-Write strukturların performansını optimallaşdırır — real surət çıxarma yalnız ilk mutasiyada baş verir, hər mənimsətmədə yox.
  • Swift standart tipləri — Int, String, Array, Dictionary — strukturlar kimi tətbiq edilmişdir, bu da bütün əsas əməliyyatlar üçün value semantics-i təmin edir.
  • Mutating — strukturun xassələrini dəyişən metodlar üçün məcburi açar söz; çağırış yalnız var nümunələrində mümkündür.
  • Strukturlar mirası dəstəkləmir, lakin protokolları tətbiq edir və funksionallıq əlavə etmək üçün genişləndirmələrdən istifadə edə bilər.
  • Equatable və Hashable bütün xassələri bu protokollara uyğun gələn strukturlar üçün avtomatik tətbiq edilir — bu, müqayisəni və kolleksiyalarda istifadəni asanlaşdırır.
  • Apple struct-u susmaya görə tip kimi tövsiyə edir — class-dan yalnız miras, ümumi eynilik və ya idarə olunan obyekt həyat dövrü tələb olunduqda 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