Skip to content Skip to sidebar Skip to footer

Belajar Swift : Cara Menggunakan Kelas Ekstensi di Swift

Cara Menggunakan Kelas Ekstensi di Swift



Fungsionalitas kelas yang ada, struktur atau jenis pencacahan dapat ditambahkan dengan bantuan ekstensi. Fungsionalitas jenis dapat ditambahkan dengan ekstensi tetapi fungsi tersebut tidak dapat diganti dengan ekstensi.

Fungsi Ekstensi Cepat -

  • Menambahkan properti yang dihitung dan properti tipe yang dihitung
  • Mendefinisikan contoh dan metode tipe.
  • Menyediakan penginisialisasi baru.
  • Mendefinisikan langganan
  • Mendefinisikan dan menggunakan tipe bertingkat baru
  • Membuat tipe yang ada sesuai dengan protokol

Ekstensi dinyatakan dengan kata kunci 'ekstensi'

Sintaksis

extension SomeType {
   // new functionality can be added here
}

Tipe yang ada juga dapat ditambahkan dengan ekstensi untuk menjadikannya sebagai standar protokol dan sintaksnya mirip dengan kelas atau struktur.

extension SomeType: SomeProtocol, AnotherProtocol {
   // protocol requirements is described here
}

Properti Terhitung

Properti 'instance' dan 'type' yang dihitung juga dapat diperluas dengan bantuan ekstensi.

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 is \(addition)")

let subtraction = 120.sub
print("Subtraction is \(subtraction)")

let multiplication = 39.mul
print("Multiplication is \(multiplication)")

let division = 55.div
print("Division is \(division)")

let mix = 30.add + 34.sub
print("Mixed Type is \(mix)")

Ketika kami menjalankan program di atas menggunakan playground, kami mendapatkan hasil sebagai berikut -

Addition is 103
Subtraction is 110
Multiplication is 390
Division is 11
Mixed Type is 154

Penginisialisasi

Swift 4 memberikan fleksibilitas untuk menambahkan penginisialisasi baru ke jenis yang sudah ada dengan ekstensi. Pengguna dapat menambahkan tipe kustom mereka sendiri untuk memperluas tipe yang sudah ditentukan dan opsi inisialisasi tambahan juga dimungkinkan. Ekstensi hanya mendukung init (). deinit () tidak didukung oleh ekstensi.

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 ("Inside mult block \(calc.a.num1, calc.a.num2)")
print("Inside mult block \(calc.b.no1, calc.b.no2)")

let memcalc = mult(a: sum(num1: 300, num2: 500),b: diff(no1: 300, no2: 100))
print("Inside mult block \(memcalc.a.num1, memcalc.a.num2)")
print("Inside mult block \(memcalc.b.no1, memcalc.b.no2)")

extension mult {
   init(x: sum, y: diff) {
      let X = x.num1 + x.num2
      let Y = y.no1 + y.no2
   }
}

let a = sum(num1: 100, num2: 200)
print("Inside Sum Block:\( a.num1, a.num2)")

let b = diff(no1: 200, no2: 100)
print("Inside Diff Block: \(b.no1, b.no2)")

Ketika kami menjalankan program di atas menggunakan playground, kami mendapatkan hasil sebagai berikut -

Inside mult block (100, 200)
Inside mult block (200, 100)
Inside mult block (300, 500)
Inside mult block (300, 100)
Inside Sum Block:(100, 200)
Inside Diff Block: (200, 100)

Metode

Metode instance baru dan metode tipe dapat ditambahkan lebih jauh ke subclass dengan bantuan ekstensi.

extension Int {
   func topics(summation: () -> ()) {
      for _ in 0..<self {
         summation()
      }
   }
}

4.topics(summation: {
   print("Inside Extensions Block")
})

3.topics(summation: {
   print("Inside Type Casting Block")
})

Ketika kami menjalankan program di atas menggunakan playground, kami mendapatkan hasil sebagai berikut -

Inside Extensions Block
Inside Extensions Block
Inside Extensions Block
Inside Extensions Block
Inside Type Casting Block
Inside Type Casting Block
Inside Type Casting Block

topik () fungsi mengambil argumen tipe '(penjumlahan: () → ())' untuk menunjukkan fungsi tidak mengambil argumen apa pun dan tidak akan mengembalikan nilai apa pun. Untuk memanggil fungsi itu beberapa kali, untuk blok diinisialisasi dan panggilan ke metode dengan topic () diinisialisasi.

Metode Mutasi Instans

Metode instance juga dapat dimutasi ketika dideklarasikan sebagai ekstensi.

Struktur dan metode enumerasi yang mengubah diri atau propertinya harus menandai metode instance sebagai mutasi, seperti metode mutasi dari implementasi asli.

extension Double {
   mutating func square() {
      let pi = 3.1415
      self = pi * self * self
   }
}

var Trial1 = 3.3
Trial1.square()
print("Area of circle is: \(Trial1)")

var Trial2 = 5.8
Trial2.square()
print("Area of circle is: \(Trial2)")

var Trial3 = 120.3
Trial3.square()
print("Area of circle is: \(Trial3)")

Ketika kami menjalankan program di atas menggunakan playground, kami mendapatkan hasil sebagai berikut -

Area of circle is: 34.210935
Area of circle is: 105.68006
Area of circle is: 45464.070735

Berlangganan

Menambahkan langganan baru ke instance yang sudah dideklarasikan juga dapat dilakukan dengan ekstensi.

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])

Ketika kami menjalankan program di atas menggunakan playground, kami mendapatkan hasil sebagai berikut -

2
6
5

Jenis Bersarang

Jenis bersarang untuk kelas, struktur dan contoh enumerasi juga dapat diperluas dengan bantuan ekstensi.

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(numb: [0, 1, 2, 3, 4, 7])

Ketika kami menjalankan program di atas menggunakan playground, kami mendapatkan hasil sebagai berikut -

10
20
30
40
50
50

Post a Comment for "Belajar Swift : Cara Menggunakan Kelas Ekstensi di Swift"

close