Swift 5.3: Apa yang Baru?

Hai Habr! Bahasa pemrograman Swift sangat populer karena penggunaannya dalam menulis aplikasi untuk iOS, sehingga pengembangannya menarik bagi semua orang yang terlibat dalam bidang ini.

Mari kita lihat apa yang baru untuk pengembang Swift versi 5.3.

Beberapa penutupan trailing


Versi baru ( SE-0279 ) menawarkan sintaksis baru untuk penutupan terbatas yang memungkinkan Anda untuk memanggil beberapa penutupan sebagai parameter fungsi dengan cara yang lebih mudah dibaca. Ini meminimalkan penggunaan terlalu banyak tanda kurung dalam tanda tangan fungsi.

import Foundation

func load(url: String, success: (Data) -> Void, failure: (Error) -> Void) {
    
}

// old  version

load(url: "someURL", success: { data in }, failure: { error in })

// new multiple trailing closures

load(url: "someURL") { (data) in
    // do smth
} failure: { (error) in
    // do smth
}

Pada contoh 2 opsi panggilan, dapat dilihat bahwa secara visual yang kedua terlihat sedikit lebih bagus.

Multi-Pattern Catch Clauses


Saat ini, setiap klausa tangkapan dalam pernyataan do-catch hanya dapat berisi satu pola. Untuk mengatasi masalah ini, pengembang akan menggunakan kemampuan opsi sakelar untuk memasukkan pencocokan pola di dalam tubuh pernyataan penangkapan, dengan demikian meningkatkan kode bersarang dan digandakan ( SE-0276 ).

Catch item sekarang memungkinkan pengguna untuk menentukan daftar templat yang dipisahkan koma dengan kemampuan untuk mengikat variabel ke badan tangkapan, seperti dalam sebuah saklar.

enum NetworkError: Error {
    case failure, timeout
}

// old  version
func networkCall(){
  do{
    try someNetworkCall()
  } catch NetworkError.timeout{
    print("timeout")
  } catch NetworkError.failure{
    print("failure")
  }
}

// new multi-Pattern catch clauses
func networkCall(){
  do{
    try someNetworkCall()
  } catch NetworkError.failure, NetworkError.timeout {
    print("handle for both")
  }
}

Kesesuaian Sebanding yang Disintesis untuk Enum


Hingga saat ini, membandingkan 2 elemen pencacahan bukanlah hal yang โ€œmenyenangkanโ€. Itu perlu untuk menyesuaikan Sebanding dan menulis fungsi statis <untuk menentukan apakah nilai asli kurang dari yang lain.

Sekarang Swift ( SE-0266 ) memungkinkan Anda untuk tidak "berkeringat" atas implementasi semua hal ini, dan Anda tidak perlu mengimplementasikan protokol secara eksplisit selama enumerasi Anda memiliki tipe yang sama. Jika nilai yang sesuai tidak ditentukan, daftar akan dibandingkan dalam urutan semantik deklarasi.

enum Brightness: Comparable {
    case low(Int)
    case medium
    case high
}

([.high, .low(1), .medium, .low(0)] as [Brightness]).sorted()
// [Brightness.low(0), Brightness.low(1), Brightness.medium, Brightness.high]

jumlah diri bisa dikurangi


Mulai sekarang, diri dapat dihilangkan di tempat-tempat di mana ia tidak lagi diperlukan ( SE-0269 ). Sebelumnya, menggunakan penutupan sendiri diperlukan ketika kami menangkap nilai dari lingkup luar.

struct OldView: View {

    var body: some View {
        Button(action: {
            self.sayHello()
        }) {
            Text("Press")
        }
    }
    
    func sayHello() {}
}

struct NewView: View {

    var body: some View {
        Button {
            sayHello()
        } label: {
            Text("Press")
        }
    }
    
    func sayHello(){}
}

Dimana secara generik


Versi bahasa yang baru ( SE-0267 ) memperkenalkan kemampuan untuk melampirkan tempat fungsi di dalam tipe dan ekstensi umum.

struct Stack<Element> {
    private var array = [Element]()

    mutating func push(_ obj: Element) {
        array.append(obj)
    }

    mutating func pop(_ obj: Element) -> Element? {
        array.popLast()
    }
}

extension Stack {
    func sorted() -> [Element] where Element: Comparable {
        array.sorted()
    }
}

Anda bisa menambahkan metode diurutkan () baru ke stack, tetapi hanya untuk kasus-kasus ketika elemen di dalam tumpukan sesuai dengan Sebanding.

Tipe Baru Float16


Memperkenalkan Float16 setengah floating point presisi ( SE-0277 ). Dengan munculnya pembelajaran mesin pada perangkat seluler dalam beberapa tahun terakhir, ini hanya menunjukkan ambisi Apple untuk mempromosikan topik ini. Float 16 umumnya digunakan pada GPU seluler untuk komputasi dan sebagai format terkompresi untuk skala dalam aplikasi ML.

let f16: Float16 = 7.29

Swift 5.3 telah memperkenalkan banyak peningkatan pada Swift Package Manager (SPM). Pertimbangkan mereka.

  1. SE-0271 (Package Manager Resources) memungkinkan SPM mengandung sumber daya seperti gambar, audio, JSON, dan lainnya.
  2. SE-0272 (Package Manager Binary Dependencies) memungkinkan SPM untuk menggunakan paket biner bersama dengan dukungan paket sumber yang ada. Ini berarti SDK sumber bersama yang tertutup seperti Firebase sekarang dapat diintegrasikan menggunakan SPM.
  3. SE-0273 (Package Manager Conditional Target Dependencies) memungkinkan Anda untuk mengonfigurasi target sehingga mereka hanya memiliki dependensi untuk platform dan konfigurasi tertentu. Misalnya, Anda dapat menetapkan kerangka kerja tambahan khusus saat kompilasi untuk Linux.
  4. SE-0278 memungkinkan Anda untuk menambahkan sumber daya lokal.

Dengan demikian, dapat dinyatakan bahwa versi 5.3 memperkenalkan beberapa inovasi bagus yang akan diambil seiring waktu oleh pengembang.

All Articles