Swift: nima, sintaksis va tilning asosiy tushunchalari

Muallif: IT Sectr Nashr etilgan: 2026-02-09 O'qish vaqti: 8 daq

Swift — Apple kompaniyasining zamonaviy dasturlash tili, WWDC 2014 da Objective-C o'rnini bosuvchi sifatida taqdim etilgan. Swift xavfsiz tiplashtirish, ARC (Automatic Reference Counting) avtomatik xotira boshqaruvi va protokol-yo'naltirilgan yondashuvni birlashtiradi. Swift Programming Language — sintaksis va standart kutubxona haqida asosiy manba.

Asosiy nuqtalar

  • Swift — type inference, Optionals va Protocol-Oriented Programming bilan statik tipli til
  • Optionals — Optional Binding (if let) va Optional Chaining (?.) orqali nil bilan xavfsiz ishlash
  • ARC — qo'lda retain/release qilmasdan xotirani boshqarish uchun avtomatik havolalarni sanash
  • Closures — kontekstni tutib olish bilan anonim funksiyalar, callback-API va funksional zanjirlarda ishlatiladi
  • Struct vs Class — tayinlash va meros olishda turlicha xatti-harakatga ega value-tiplar vs reference-tiplar

Swift nima?

Swift — Apple tomonidan iOS, macOS, watchOS, tvOS va visionOS uchun ishlab chiqilgan ko'p paradigmali dasturlash tili. Tilning asosiy maqsadlari: xavfsizlik, tezlik va sintaksisning ifodaliligi. Swift LLVM kompilyatoridan foydalanadi va ishlash jihatidan C++ bilan solishtirish mumkin bo'lgan optimallashtirilgan mashina kodini yaratadi.

2014-yilda chiqarilganidan beri Swift 6 asosiy versiyadan o'tdi. Swift 6 (2024) concurrent kod izolyatsiyasini qattiq nazorat qilish orqali to'liq data-race safety modelini taqdim etdi. GitHub Octoverse 2025 ma'lumotlariga ko'ra, Swift hamjamiyat o'sishi bo'yicha eng yaxshi 10 til qatoriga kiradi va Apple platformalarida qabul qilish tezligi bo'yicha Rust va Kotlinni ortda qoldiradi.

Swift ochiq va kross-platformali — manba kodi GitHub-da (Swift Open Source) nashr etilgan. Apple platformalaridan tashqari, Swift server ishlab chiqish uchun Linux va Windows-da (Vapor, Hummingbird) ishlatiladi, ammo asosiy qo'llanish sohasi Apple ekotizimida mobil va desktop ilovalarini ishlab chiqishdir.

Nima uchun Swift Objective-C ni almashtirdi

O'tishning asosiy sabablari: Swift Objective-C da mumkin bo'lgan butun xato sinflarini yo'q qiladi. Type safety kompilyatsiya bosqichida tur nomuvofiqligining oldini oladi. Optionals nil-ga murojaatlarni istisno qiladi. ARC birinchi kundan boshlab o'rnatilgan, Objective-C dagi MRC/ARC dan farqli o'laroq. Swift sintaksisi qisqaroq va o'qilishi oson — tadqiqotlar shunga o'xshash vazifalarni hal qilishda Objective-C ga nisbatan kod hajmining 30-40% ga qisqarishini ko'rsatadi.

Sintaksis va asosiy konstruksiyalar

Swift sintaksisi tanish C-ga o'xshash konstruksiyalarni funksional tillar elementlari bilan birlashtiradi. O'zgaruvchilar var, doimiylar esa let orqali e'lon qilinadi. Kompilyator type inference dan foydalanadi, shuning uchun turni aniq ko'rsatish faqat noaniqlik bo'lganda talab qilinadi.

swift
import Foundation

// Doimiylar va o'zgaruvchilar
let name = "Swift"
var version = 6.0
var count: Int = 42

// Standart parametrli funksiyalar
func greet(person: String, greeting: String = "Hello") -> String {
    return "\(greeting), \(person)!"
}

// Erta chiqish uchun Guard-let
func parse(input: String?) -> Int {
    guard let value = input, let number = Int(value) else {
        return 0
    }
    return number
}

Switch va pattern matching Swift da C va Kotlin dagidan kuchliroq. Switch kortejlar, diapazonlar, where shartlari va qiymatlarni bog'lash bilan moslashtirishni qo'llab-quvvatlaydi. Kompilyator barcha case larning to'liq qamrovini tekshiradi — default ning yo'qligi xato emas, agar barcha mumkin bo'lgan qiymatlar qoplangan bo'lsa.

swift
let point = (x: 3, y: -1)

switch point {
case (0, 0):
    print("Boshlang'ich nuqta")
case let (x, y) where x == y:
    print("X Y ga teng")
case let (x, y) where abs(y) > x:
    print("Y modul bo'yicha X dan katta")
default:
    print("Nuqta (\(point.x), \(point.y))")
}

Optionals va nil bilan xavfsiz ishlash

Optionals — tip tizimi darajasida null-havola muammosini hal qiladigan Swift ning markaziy tushunchasi. Optional<Wrapped> — ikki case li enum: .none (nil) va .some(Wrapped). Kompilyator Optional ni aniq tekshirishsiz ishlatishni taqiqlaydi, bu butun bir runtime xato sinfini istisno qiladi.

swift
var optionalString: String? = "Hello"
optionalString = nil  // ruxsat etilgan

// Optional Binding — xavfsiz chiqarish
if let text = optionalString {
    print("Matn: \(text)")
} else {
    print("Qiymat yo'q")
}

// Optional Chaining — xususiyatlarga xavfsiz kirish
let length = optionalString?.count ?? 0

// Nil-coalescing operatori
let greeting = optionalString ?? "Default"

Optional Chaining ?. operatori bilan metodlarni xavfsiz chaqirish va opsional qiymatning xususiyatlariga kirish imkonini beradi. Agar zanjir nil bilan uzilsa, butun ifodaning natijasi nil bo'ladi. Nil-coalescing (??) standart qiymatni ta'minlaydi va placeholder matnini ko'rsatish uchun UI kodida keng qo'llaniladi.

Protokollar va kengaytmalar

Protocols Swift da kontrakt — xususiyatlar va metodlar to'plamini belgilaydi. Java interfeyslaridan farqli o'laroq, Swift protokollari protocol extensions orqali standart implementatsiyalarga ega bo'lishi mumkin. Bu sinf meros olishi o'rniga Apple tomonidan tavsiya etilgan Protocol-Oriented Programming ning asosidir.

swift
protocol NamedEntity {
    var name: String { get }
    func description() -> String
}

// Extension orqali standart implementatsiya
extension NamedEntity {
    func description() -> String {
        return "Entity: \(name)"
    }
}

// Extension orqali konformizm
extension String: NamedEntity {
    var name: String { return self }
}

Protocol Extensions har bir mos turni o'zgartirmasdan protokolga metodlar qo'shish imkonini beradi. Bu umumiy utilitalar qo'shish uchun ayniqsa foydali: Sequence uchun map, filter, reduce yoki JSON serializatsiyasi uchun Codable. Apple ko'plab freymvorklarni (SwiftUI, Combine) kengaytmalari bo'lgan protokollar ustiga qurgan.

Closures va funksional zanjirlar

Closures Swift da — tashqi kontekstdan o'zgaruvchilarni tutib oladigan anonim funksiyalar. Sintaksis jihatidan closures Kotlin dagi lambdalarga o'xshaydi, lekin yanada moslashuvchan sintaksisga ega: trailing closure, shorthand argument names ($0, $1) va autoclosures.

swift
// Kontekstni tutib olish bilan closure
let numbers = [5, 3, 8, 1, 9]

// Trailing closure syntax
let sorted = numbers.sorted { $0 < $1 }

// Funksional zanjir
let result = numbers
    .filter { $0 > 3 }
    .map { $0 * 2 }
    .reduce(0, +)

// Funksiya parametri sifatida closure
func performAsync(completion: @escaping (Result<Data, Error>) -> Void) { }

@escaping closures — closure funksiyadan qaytgandan keyin bajarilganda ishlatiladi, odatda tarmoq so'rovlari va asinxron operatsiyalar uchun. @autoclosure ifodani avtomatik ravishda closure ga o'raydi, bu assert va short-circuit mantiqida ishlatiladi.

Strukturalar va sinflar: taqqoslash

struct va class o'rtasidagi tanlov — Swift modelini loyihalashdagi birinchi qarorlardan biri. Apple standart sifatida struct (value-tip) ishlatishni va faqat meros olish yoki havola bilan identifikatsiya zarur bo'lganda class (reference-tip) ga o'tishni tavsiya qiladi.

XususiyatStructClass
Uzatish usuliQiymat bilan (nusxa)Havola bilan
Meros olishQo'llab-quvvatlanmaydiQo'llab-quvvatlanadi
ARC boshqaruviTalab qilinmaydiARC (havola hisoblagichi)
Deinit deinitiatorYo'qHa
O'zgaruvchanlikXususiyatlarni o'zgartirish uchun mutating funcHar qanday metod o'zgartirishi mumkin
Kollektsiyalarda saqlashQo'shilganda nusxalanadiHavola saqlanadi

Value-tiplar (struct) ko'p oqimli muhitda xavfsizroq — har bir oqim mustaqil nusxa oladi. Reference-tiplar (class) UIKit (UIView, UIViewController) bilan ishlash uchun zarur, bu yerda havola identikligi va tizim sinflaridan meros olish talab qilinadi.

ARC xotira boshqaruvi

ARC (Automatic Reference Counting) — reference-tiplar uchun Swift xotira boshqaruv tizimi. Kompilyator runtime da retain/release amallarini joylashtiradi, obyektga kuchli havolalar sonini kuzatadi. Hisoblagich nolga yetganda, obyekt darhol bo'shatiladi.

ARC ning asosiy muammosi — retain cycles (siklik havolalar). Ikki obyekt bir-biriga kuchli havolalarni ushlab turganda, xotira bo'shatilmaydi. Yechim — weak havolalar (bo'shatilganda avtomatik nil bo'ladi) va unowned havolalar (obyektning tirikligini kafolatlaydi).

swift
class ProfileViewController: UIViewController {
    var onLogout: (() -> Void)?
    
    func setupHandler() {
        // [weak self] retain cycle ning oldini oladi
        onLogout = { [weak self] in
            guard let self else { return }
            self.dismiss(animated: true)
        }
    }
}

Closures da retain cycles oldini olish uchun [weak self] ni guard let self = self else { return } bilan ishlating. Bu qoida ayniqsa UIKit da muhim, bu yerda ViewController o'z xususiyatlariga kuchli havolalarni saqlaydi va bu xususiyatlar ichidagi closures ViewController ga havola qiladi.

Tez-tez beriladigan savollar

Swift da qanday ma'lumot turlari mavjud?

Swift Int, Double, Float, String, Bool, Array, Set, Dictionary va kortejlarni (tuples) qo'llab-quvvatlaydi. Sonli turlar qat'iy o'lchamga ega: Int8, Int16, Int32, Int64 va ishorasiz UInt. Sanalar bilan ishlash uchun Foundation dan Date, ma'lumotlar uchun Data ishlatiladi.

Swift da Optional nima va nima uchun kerak?

Optional — ikki case li enum: .none (nil) va .some(Wrapped). Swift if let, guard let yoki ?? orqali Optional ni aniq tekshirishni talab qiladi, bu NullPointerException ni istisno qiladi. Opsional zanjirlar (?.) ichma-ich opsional qiymatlarning xususiyatlariga xavfsiz kirish imkonini beradi.

Swift da struct class dan qanday farq qiladi?

Struct — value-tip, tayinlanganda nusxalanadi, meros olishni qo'llab-quvvatlamaydi, ARC talab qilmaydi. Class — reference-tip, havola orqali uzatiladi, meros olishni va deinitiatorlarni qo'llab-quvvatlaydi. Apple standart tip sifatida struct ni tavsiya qiladi.

Swift da ARC xotira boshqaruvi qanday ishlaydi?

ARC sinf obyektlariga kuchli havolalarni avtomatik hisoblaydi. Hisoblagich nolga tushganda, xotira bo'shatiladi. Siklik havolalarning oldini olish uchun weak (avtomatik nil) va unowned (kafolatlangan umr) dan foydalaning. ARC struct va enum ga tatbiq etilmaydi.

Swift da Protocol Oriented Programming nima?

Protocol-Oriented Programming — sinf iyerarxiyasi o'rniga kengaytmalari bo'lgan protokollardan foydalanadigan yondashuv. Protokollar protocol extensions orqali metodlarning standart implementatsiyalarini o'z ichiga olishi mumkin. Bu meros olishsiz kodni qayta ishlatish imkonini beradi, moslashuvchanlik va test qilinishni saqlaydi.

Xulosa

  • Swift — iOS/macOS ishlab chiqish uchun Optionals, ARC va Protocol-Oriented Programming bilan Apple ning statik tipli tili
  • Optionals — Optional Binding, Optional Chaining va nil-coalescing operatori orqali nil bilan xavfsiz ishlash
  • Protocols + Extensions — standart metod implementatsiyalari va kompozitsiya bilan Protocol-Oriented Programming asosi
  • Closures — kontekstni tutib olish, trailing syntax va xotira boshqaruvi uchun capture listlari bilan anonim funksiyalar
  • Struct vs Class — value-tiplar (nusxalash, oqim xavfsizligi) vs reference-tiplar (meros olish, ARC)
  • ARC — retain cycles oldini olish uchun weak/unowned modifikatorlari bilan avtomatik havolalarni sanash
  • Switch va pattern matching — kortejlar, diapazonlar va where shartlari bilan to'liq moslashtirish

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing