Tutorial ekspansi Swift Terbaik Pada tahun 2024, Dalam tutorial ini Anda dapat mempelajari sifat komputasi,pembina,cara,metode contoh variabel,tanda tangan,jenis bersarang,
Hal ini untuk memperpanjang kelas, struct, atau jenis pencacahan yang ada untuk menambahkan fitur baru.
Ekstensi dapat menambahkan fitur baru untuk jenis, tapi tidak bisa menimpa fungsi yang ada.
Swift ekspansi dapat:
deklarasi ekstensi menggunakanekstensi kata kunci:
extension SomeType { // 加到SomeType的新功能写到这里 }
Perpanjangan dapat memperpanjang jenis yang ada, dapat disesuaikan dengan satu atau lebih protokol, sintaks adalah sebagai berikut:
extension SomeType: SomeProtocol, AnotherProctocol { // 协议实现写到这里 }
Ekstensi dapat menambahkan contoh dihitung dari jenis properti dan properti komputasi untuk jenis yang ada.
Contoh berikut menambahkan lima properti untuk contoh perhitungan jenis Int dan memperluas fungsi:
extension Int { var add: Int {return self + 100 } var sub: Int { return self - 10 } var mul: Int { return self * 10 } var div: Int { return self / 5 } } let addition = 3.add print("加法运算后的值:\(addition)") let subtraction = 120.sub print("减法运算后的值:\(subtraction)") let multiplication = 39.mul print("乘法运算后的值:\(multiplication)") let division = 55.div print("除法运算后的值: \(division)") let mix = 30.add + 34.sub print("混合运算结果:\(mix)")
Output di atas eksekusi program adalah:
加法运算后的值:103 减法运算后的值:110 乘法运算后的值:390 除法运算后的值: 11 混合运算结果:154
Ekstensi dapat menambahkan konstruktor baru untuk jenis yang ada.
Hal ini memungkinkan Anda untuk memperpanjang jenis lainnya, jenis kustom Anda sendiri sebagai argumen konstruktor, atau jenis pilihan inisialisasi tambahan yang tidak termasuk dalam pelaksanaan asli yang disediakan.
Ekstensi dapat menambahkan konstruktor kenyamanan baru ke init kelas (), tetapi mereka tidak dapat menambahkan baru ditunjuk constructor atau destructor deinit ke kelas ().
struct sum { var num1 = 100, num2 = 200 } struct diff { var no1 = 200, no2 = 100 } struct mult { var a = sum() var b = diff() } let calc = mult() print ("mult 模块内 \(calc.a.num1, calc.a.num2)") print("mult 模块内 \(calc.b.no1, calc.b.no2)") let memcalc = mult(a: sum(num1: 300, num2: 500),b: diff(no1: 300, no2: 100)) print("mult 模块内 \(memcalc.a.num1, memcalc.a.num2)") print("mult 模块内 \(memcalc.b.no1, memcalc.b.no2)") extension mult { init(x: sum, y: diff) { _ = x.num1 + x.num2 _ = y.no1 + y.no2 } } let a = sum(num1: 100, num2: 200) print("Sum 模块内:\( a.num1, a.num2)") let b = diff(no1: 200, no2: 100) print("Diff 模块内: \(b.no1, b.no2)")
Output di atas eksekusi program adalah:
mult 模块内 (100, 200) mult 模块内 (200, 100) mult 模块内 (300, 500) mult 模块内 (300, 100) Sum 模块内:(100, 200) Diff 模块内: (200, 100)
Ekstensi dapat menambahkan metode baru dan metode contoh jenis untuk jenis yang ada.
Contoh berikut menambahkan metode contoh baru bernama topik tipe Int:
extension Int { func topics(summation: () -> ()) { for _ in 0id<self { summation() } } } 4.topics({ print("扩展模块内") }) 3.topics({ print("内型转换模块内") })
Output di atas eksekusi program adalah:
扩展模块内 扩展模块内 扩展模块内 扩展模块内 内型转换模块内 内型转换模块内 内型转换模块内
The topics
Metode menggunakan () -> ()
tunggal jenis parameter, menunjukkan bahwa fungsi tidak memiliki parameter dan tidak ada nilai kembali.
Setelah mendefinisikan ekstensi, Anda dapat menghubungi untuk setiap bilangan bulat topics
metode untuk mencapai fungsi ini untuk melakukan tugas berulang kali:
Contoh metode dengan menambahkan ekstensi juga dapat memodifikasi contoh itu sendiri.
Struktur dan disebutkan jenis memodifikasi diri atau properti metode harus ditandai sebagai metode contoh dari bermutasi, hanya memodifikasi pelaksanaan asli dari metode dari yang sama.
Contoh berikut menambahkan metode modifikasi baru yang disebut persegi untuk Swift tipe dua kali untuk mencapai perhitungan nilai asli persegi:
extension Double { mutating func square() { let pi = 3.1415 self = pi * self * self } } var Trial1 = 3.3 Trial1.square() print("圆的面积为: \(Trial1)") var Trial2 = 5.8 Trial2.square() print("圆的面积为: \(Trial2)") var Trial3 = 120.3 Trial3.square() print("圆的面积为: \(Trial3)")
Output di atas eksekusi program adalah:
圆的面积为: 34.210935 圆的面积为: 105.68006 圆的面积为: 45464.070735
Ekstensi dapat menambah indeks baru untuk tipe yang ada.
Berikut contoh untuk Swift menambahkan jenis indeks Int bulat built-in. indeks [n] Mengembalikan angka desimal
extension Int { subscript(var multtable: Int) -> Int { var no1 = 1 while multtable > 0 { no1 *= 10 --multtable } return (self / no1) % 10 } } print(12[0]) print(7869[1]) print(786543[2])
Output di atas eksekusi program adalah:
2 6 5
Anda dapat memperluas kelas yang ada, struktur, dan mantri menambahkan jenis bersarang baru:
extension Int { enum calc { case add case sub case mult case div case anything } var print: calc { switch self { case 0: return .add case 1: return .sub case 2: return .mult case 3: return .div default: return .anything } } } func result(numb: [Int]) { for i in numb { switch i.print { case .add: print(" 10 ") case .sub: print(" 20 ") case .mult: print(" 30 ") case .div: print(" 40 ") default: print(" 50 ") } } } result([0, 1, 2, 3, 4, 7])
Output di atas eksekusi program adalah:
10 20 30 40 50 50