Swift — Apple şirkətinin müasir proqramlaşdırma dili, WWDC 2014-də Objective-C-nin əvəzi kimi təqdim edilmişdir. Swift təhlükəsiz tipləşdirmə, ARC (Automatic Reference Counting) avtomatik yaddaş idarəetməsi və protokol-yönümlü yanaşmanı birləşdirir. Swift Programming Language — sintaksis və standart kitabxana haqqında əsas mənbə.
Əsas məqamlar
Swift — Apple tərəfindən iOS, macOS, watchOS, tvOS və visionOS üçün hazırlanmış multiparadiqmalı proqramlaşdırma dilidir. Dilin əsas məqsədləri: təhlükəsizlik, sürət və sintaksisin ifadəliliyi. Swift LLVM kompilyatorundan istifadə edir və performans baxımından C++ ilə müqayisə oluna bilən optimallaşdırılmış maşın kodu yaradır.
2014-cü ildə buraxılışından bəri Swift 6 əsas versiyadan keçmişdir. Swift 6 (2024) konkurent kodun izolyasiyasına ciddi nəzarət vasitəsilə tam data-race safety modelini təqdim etmişdir. GitHub Octoverse 2025 məlumatlarına görə, Swift icma artımına görə ilk 10 dil arasındadır və Apple platformalarında qəbul sürətinə görə Rust və Kotlini qabaqlayır.
Swift açıq və kross-platformalıdır — mənbə kodu GitHub-da dərc edilmişdir (Swift Open Source). Apple platformaları ilə yanaşı, Swift server inkişafı üçün Linux və Windows-da (Vapor, Hummingbird) istifadə olunur, baxmayaraq ki, əsas tətbiq sahəsi Apple ekosistemində mobil və desktop tətbiqlərinin hazırlanmasıdır.
Keçidin əsas səbəbləri: Swift Objective-C-də mümkün olan bütün səhv siniflərini aradan qaldırır. Type safety kompilyasiya mərhələsində tip uyğunsuzluğunun qarşısını alır. Optionals nil-ə istinadları istisna edir. ARC ilk gündən daxil edilmişdir, Objective-C-dəki MRC/ARC-dən fərqli olaraq. Swift-in sintaksisi daha qısa və oxunaqlıdır — tədqiqatlar oxşar tapşırıqların həllində Objective-C ilə müqayisədə kodun həcmində 30-40% azalma göstərir.
Əsas Swift sintaksisi tanış C-oxşar konstruksiyaları funksional dillərin elementləri ilə birləşdirir. Dəyişənlər var, sabitlər isə let vasitəsilə elan edilir. Kompilyator type inference istifadə edir, buna görə də tipin açıq göstərilməsi yalnız qeyri-müəyyənlik olduqda tələb olunur.
import Foundation
// Sabitlər və dəyişənlər
let name = "Swift"
var version = 6.0
var count: Int = 42
// Standart parametrləri olan funksiyalar
func greet(person: String, greeting: String = "Hello") -> String {
return "\(greeting), \(person)!"
}
// Erkən çıxış üçün Guard-let
func parse(input: String?) -> Int {
guard let value = input, let number = Int(value) else {
return 0
}
return number
}Switch və pattern matching Swift-də C və Kotlin-dən daha güclüdür. Switch kortejlər, aralıqlar, where şərtləri və dəyər bağlama ilə uyğunlaşdırmanı dəstəkləyir. Kompilyator bütün case-lərin əhatəli əhatəsini yoxlayır — default-un olmaması xəta deyil, əgər bütün mümkün dəyərlər əhatə olunubsa.
let point = (x: 3, y: -1)
switch point {
case (0, 0):
print("Başlanğıc nöqtəsi")
case let (x, y) where x == y:
print("X Y-ə bərabərdir")
case let (x, y) where abs(y) > x:
print("Y modul üzrə X-dən böyükdür")
default:
print("Nöqtə (\("point.x), \(point.y))")
}Optionals — tip sistem səviyyəsində null-istinad problemini həll edən Swift-in mərkəzi konsepsiyasıdır. Optional<Wrapped> — iki case-li enum: .none (nil) və .some(Wrapped). Kompilyator Optional-in açıq yoxlama olmadan istifadəsini qadağan edir, bu da bütöv bir runtime xəta sinfini istisna edir.
var optionalString: String? = "Hello"
optionalString = nil // icazə verilir
// Optional Binding — təhlükəsiz çıxarma
if let text = optionalString {
print("Mətn: (\("text)")
} else {
print("Dəyər yoxdur")
}
// Optional Chaining — xüsusiyyətlərə təhlükəsiz giriş
let length = optionalString?.count ?? 0
// Nil-coalescing operatoru
let greeting = optionalString ?? "Default"Optional Chaining ?. operatoru ilə metodları təhlükəsiz çağırmağa və opsional dəyərin xüsusiyyətlərinə daxil olmağa imkan verir. Əgər zəncir nil ilə kəsilərsə, bütün ifadənin nəticəsi nil olur. Nil-coalescing (??) standart dəyər təmin edir və placeholder mətni göstərmək üçün UI kodunda geniş istifadə olunur.
Protocols Swift-də kontrakt — xüsusiyyətlər və metodlar toplusunu təyin edir. Java interfeyslərindən fərqli olaraq, Swift protokolları protocol extensions vasitəsilə standart tətbiqlərə malik ola bilər. Bu, sinif miras alması əvəzinə Apple tərəfindən tövsiyə edilən Protocol-Oriented Programming-in əsasıdır.
protocol NamedEntity {
var name: String { get }
func description() -> String
}
// Extension vasitəsilə standart tətbiq
extension NamedEntity {
func description() -> String {
return "Entity: \(name)"
}
}
// Extension vasitəsilə konformizm
extension String: NamedEntity {
var name: String { return self }
}Protocol Extensions hər uyğun tipi dəyişmədən protokola metodlar əlavə etməyə imkan verir. Bu, ümumi utilitlər əlavə etmək üçün xüsusilə faydalıdır: Sequence üçün map, filter, reduce və ya JSON seriyalaşdırma üçün Codable. Apple bir çox freymvorkları (SwiftUI, Combine) genişləndirmələri olan protokollar üzərində qurmuşdur.
Closures Swift-də — xarici kontekstdən dəyişənləri ələ keçirən anonim funksiyalar. Sintaksis baxımından closures Kotlin-dəki lambdalara bənzəyir, lakin daha çevik sintaksisə malikdir: trailing closure, shorthand argument names ($0, $1) və autoclosures.
// Kontekst ələ keçirmə ilə closure
let numbers = [5, 3, 8, 1, 9]
// Trailing closure syntax
let sorted = numbers.sorted { $0 < $1 }
// Funksional zəncir
let result = numbers
.filter { $0 > 3 }
.map { $0 * 2 }
.reduce(0, +)
// Funksiya parametri kimi closure
func performAsync(completion: @escaping (Result<Data, Error>) -> Void) { }@escaping closures — closure funksiyadan qayıtdıqdan sonra icra olunduqda istifadə olunur, tipik olaraq şəbəkə sorğuları və asinxron əməliyyatlar üçün. @autoclosure ifadəni avtomatik olaraq closure-a bükür, bu assert və short-circuit məntiqində istifadə olunur.
struct və class arasında seçim — Swift modelinin layihələndirilməsində ilk qərarlardan biridir. Apple standart olaraq struct (value-tip) istifadə etməyi və yalnız miras alma və ya referansla identifikasiya zərurəti olduqda class (reference-tip) keçməyi tövsiyə edir.
| Xarakteristika | Struct | Class |
|---|---|---|
| Ötürmə üsulu | Dəyərlə (kopiya) | Referansla |
| Miras alma | Dəstəklənmir | Dəstəklənir |
| ARC idarəetməsi | Tələb olunmur | ARC (referans sayğacı) |
| Deinit deinitiatoru | Yox | Bəli |
| Dəyişkənlik | Xüsusiyyətləri dəyişmək üçün mutating func | İstənilən metod dəyişə bilər |
| Kolleksiyalarda saxlanma | Daxil edildikdə kopyalanır | Referans saxlanılır |
Value-tiplər (struct) çoxiplikli mühitdə daha təhlükəsizdir — hər bir axın müstəqil kopiya alır. Reference-tiplər (class) UIKit (UIView, UIViewController) ilə iş üçün zəruridir, burada referans eyniliyi və sistem siniflərindən miras alma tələb olunur.
ARC (Automatic Reference Counting) — reference-tiplər üçün Swift yaddaş idarəetmə sistemidir. Kompilyator runtime-da retain/release əməliyyatlarını yerləşdirir, obyektə güclü istinadların sayını izləyir. Sayğac sıfıra çatdıqda, obyekt dərhal azad edilir.
ARC-nin əsas problemi — retain cycles (siklik istinadlar). İki obyekt bir-birinə güclü istinadlar saxladıqda, yaddaş azad edilmir. Həll yolu — weak istinadlar (azad edildikdə avtomatik nil olur) və unowned istinadlar (obyektin canlı olduğunu təmin edir).
class ProfileViewController: UIViewController {
var onLogout: (() -> Void)?
func setupHandler() {
// [weak self] retain cycle-in qarşısını alır
onLogout = { [weak self] in
guard let self else { return }
self.dismiss(animated: true)
}
}
}Closures-da retain cycles qarşısını almaq üçün [weak self] istifadə edin guard let self = self else { return } ilə. Bu qayda xüsusilə UIKit-də vacibdir, burada ViewController öz xüsusiyyətlərinə güclü istinadlar saxlayır və bu xüsusiyyətlərin daxilindəki closures ViewController-a istinad edir.
Tez-tez verilən suallar
Swift Int, Double, Float, String, Bool, Array, Set, Dictionary və kortejləri (tuples) dəstəkləyir. Say tipləri sabit ölçüyə malikdir: Int8, Int16, Int32, Int64 və işarəsiz UInt. Tarixlərlə iş üçün Foundation-dan Date, məlumatlar üçün Data istifadə olunur.
Optional — iki case-li enum: .none (nil) və .some(Wrapped). Swift if let, guard let və ya ?? vasitəsilə Optional-in açıq yoxlanılmasını tələb edir, bu da NullPointerException-u istisna edir. Opsional zəncirlər (?.) iç-içə opsional dəyərlərin xüsusiyyətlərinə təhlükəsiz daxil olmağa imkan verir.
Struct — value-tip, təyin edildikdə kopyalanır, miras almanı dəstəkləmir, ARC tələb etmir. Class — reference-tip, referansla ötürülür, miras almanı və deinitiatorları dəstəkləyir. Apple standart tip olaraq struct tövsiyə edir.
ARC sinif obyektlərinə güclü istinadları avtomatik sayır. Sayğac sıfırlandıqda yaddaş azad edilir. Siklik istinadların qarşısını almaq üçün weak (avtomatik nil) və unowned (təmin edilmiş ömür) istifadə edin. ARC struct və enum-a tətbiq edilmir.
Protocol-Oriented Programming — sinif iyerarxiyası əvəzinə genişləndirmələri olan protokollardan istifadə edən yanaşmadır. Protokollar protocol extensions vasitəsilə metodların standart tətbiqlərini ehtiva edə bilər. Bu, miras alma olmadan kodun təkrar istifadəsinə imkan verir, çevikliyi və test edilə bilənliyi qoruyur.
Nəticə
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.
Həm də oxuyun