Subscripts dalam Swift


Pernahkan Kamu berfikir untuk membuat shortcut untuk memanggil sebuah fungsi? Jika pernah maka teknik itu disebut Subscripts dalam swift.

Silahkan buka playground kamu dan mulai koding.

Normal Method

Buatlah sebuah class HelloKitty yang memiliki fungsi yang mengembalikan nilai string.

struct HelloKitty {
  func saySomething() -> String {
    return "I'm Cute"
  }
}

Buat sebuah instance dan panggil saySomething()

let babe = HelloKitty()
babe.saySomething() // "I'm Cute"

Subscripts

Subscripts adalah analogi dengan method/fungsi. Namun, tidak memiliki nama. Sebagai gantinya Kamu menambahkan kata kunci, subscript.

struct WeekDays {
  var days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]

  subscript(index: Int) -> String {
    return days[index]
  }  
}

Panggil subscript dengan menambahkan [] di akhir instance.

let myDays = WeekDays()
myDays[0]  // "Monday"
myDays[1]  // "Tuesday"

Dictionary

Ketika Kamu mengakses elemen di dalam dictionary, itu selalu mengembalikan tipe optional.

var info = ["Height": 183, "Body Fat": 12.5, "Weight": 76]
let height = info["Height"] // height is an optional string

Oke sekarang mari kita mengakses elemen tanpa mengembalikan tipe optional menggunakan subscripts.

struct HealthInfo {
  var info = ["Height": 183, "Body Fat": 12.5, "Weight": 76]

  subscript(key: String) -> Double {
    if let newInfo = info[key] {
      return newInfo
    } else {
      return 0
    }
  }
}

Penting: Kamu juga bisa menggunakan guard.

Akses Element

Mengembalikan non-optional menggunakan fungsi subscript.

let fadielse = HealthInfo()
fadielse["Height"]         // 183
fadielse["Body Fat"]        // 12.5
fadielse["123456789"]       // 0

Penggunaan subscript dalam prakteknya biasanya:

  • Mendapatkan jumlah rows dalam tableView/collectionView
  • Semua yang berhubungan dengan pairing dan jenis-jenis tipe collection

Semoga bermanfaat.

0 0 votes
Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments

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