Override dalam Swift


Kamu akan menguasai kata super dan override pada artikel ini. Banyak pemula kurang memahami ini karena mereka hanya copy-paste dari StackOver Flow dan tutorial yang ditemukan di mbah Google. Ya, termasuk saya juga ✌️. Tapi mulai sekarang kita harus memahaminya.

Oke sekarang buka Playground Kamu, yo kita belajar bersama.

Contoh UIViewController

import UIKit

class MyViewController: UIViewController {
  
  override func viewDidLoad() {
    super.viewDidLoad()
    print("Hello")
  }
}

Penting: Fungsi viewDidLoad() berjalan secara otomatis oleh kelas UIViewController.

Vehicle Class

Buat kelas Vehicle yang berisi satu properti gettable dan satu fungsi.

class Vehicle {
  
  var description: String {
    return "Hello, I'm moving at 300km/hr"
  }

  func warning() {
    print("Be careful, I'm going very fast")
  }
}

Override Fungsi dan Properti

Buat kelas ToyCar yang inherit dari Vehicle. Kamu dapat mengkustomisasi properti dan fungsi yang diinherit dengan memasukkan override. Kamu dapat mengakses properti dan fungsi yang diinherit dengan memanggil super.

class Ferrari: Vehicle {
  
  override var description: String { // you overriding description from Vehicle
    return "\(super.description) hey, I'm a cool car"
  }

  override func warning() { // you overriding warning method from Vehicle
    print("hello, don't mind me")
    super.warning() // you call warning method from super class (Vehicle)
  }
}

Sekarang kita coba akses properti description dan fungsi warning dari Ferrari.

let myFutureCar = Ferrari()
myFutureCar.description
// "Hello, I'm moving at 300km/hr hey I'm a cool car"
myFutureCar.warning()
// "hello, don't mind me"
// "Be careful, I'm going pretty fast"

Super Init

Kamu dapat mengganti fungsi init dari super class. Ingat, setiap properti harus diinisialisasi, bahkan yang dari super class.

Sekarang buatlah class yang berisi properti origin.

class Human {
 
 var origin: String = "Japanese"

 init(enterOrgin: String) {
   origin = enterOrgin
 }
}

Subclass

Buat subclass Indonesian yang inherit dari class Korea berisi properti name. Namun, ketika Kamu menginisialisasi, Kamu harus menginisialisasi properti asal dari Human dengan memanggil super.init.

class Indonesian: Human {
  
  let name: String

  init(enterName: String) {
    self.name = enterName
    super.init(enterOrgin: "Indonesian")
  }

  init(enterName: String, origin: String) {
    self.name = enterName
    super.init(enterOrgin: origin)
  }
}

Buat Object

Ada dua metode init di kelas Indonesian. Kamu dapat memilih salah satu karena keduanya menginisialisasi properti asal dari kelas Human.

let budi = Indonesian(enterName: "Budi")
budi.origin // Indonesian
budi.name // Budi
let doremi = Indonesian(enterName: "Doremi", origin: "Indonesian")
doremi.origin // Indonesian
doremi.name //Doremi

Override Init

Kamu tidak hanya dapat override fungsi dan properti, tetapi juga fungsi init.

Base Class

Buat Kelas Tesla yang memiliki property numberOfWheels.

class Tesla {
  var numberOfWheels: Int

  init(enterWheelNumber: Int) {
    numberOfWheels = enterWheelNumber
  }
}

Subclass

Buat subclass ModelS yang inherit dari Tesla. Tambahkan override di depan metode init dan panggil super.init untuk menginisialisasi properti dari kelas Tesla. Setelah Kamu menginisialisasi properti, Kamu dapat menambahkan kode tambahan untuk penyesuaian.

class ModelS: Tesla {
  override init(enterWheelNumber: Int) {
    super.init(enterWheelNumber: enterWheelNumber)
    print("Wow, you've got a nice car")
  }
}

Model(enterWheelNumber: 50) // Wow, you've got a nice car

Mulai sekarang, Kamu tidak perlu lagi takut lagi super.init, super.viewDidLoad, dan `override. Jika Kamu merasa bingung, saya sarankan Kamu untuk membaca tulisan ini beberapa kali dan mungkin mengajukan pertanyaan dibawah jika perlu. Kamu harus memahami setiap informasi dari sini. Jika tidak, Kamu akan sakit kepala ketika bertemu dengan kasus ini di project Kamu.

Semoga bermanfaat.

0 0 votes
Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments

0
Would love your thoughts, please comment.x
()
x