() translation by (you can also view the original English article)
Pada artikel sebelumnya, Anda belajar tentang variabel, konstanta, dan beberapa tipe data umum, seperti bilangan integer, float, dan string. Pada artikel ini, kita akan belajar ke collection. Perpustakaan standar Swift mendefinisikan dua jenis collection, array dan dictionary. Mari kita mulai dengan array.
1. Array
Jika Anda terbiasa dengan Objective-C, JavaScript, atau PHP, maka Anda tidak akan kesulitan membungkus kepala Anda seputar konsep array. Array adalah koleksi nilai yang diindeks dengan nol dan terindeks. Namun, ada beberapa perbedaan penting.
Tipe
Perbedaan penting pertama dengan array di Objective-C adalah bahwa nilai yang tersimpan dalam array selalu memiliki tipe yang sama. Pada awalnya, ini mungkin tampak seperti pembatasan yang signifikan, tapi sebenarnya tidak demikian. Padahal, keterbatasan ini memiliki keunggulan penting. Kita tahu persis tipe apa yang kita dapatkan saat kita meminta array untuk salah satu nilainya.
Perbedaan kunci lainnya dengan array Objective-C adalah jenis nilai yang bisa disimpan oleh sebuah array. Dalam Objective-C, array hanya dapat menyimpan nilai dari tipe kelas. Swift tidak memiliki keterbatasan ini. Sebuah array di Swift dapat menyimpan string, bilangan bulat, float dan juga contoh kelas. Bagaimana ini bekerja dan mengapa hal ini mungkin terjadi di Swift akan menjadi jelas nanti dalam rangkaian ini saat kita membahas kelas dan struktur.
Deklarasi
Saat membuat array dapat dilakukan dengan beberapa cara, Anda perlu mengingat bahwa Swift perlu mengetahui jenis nilai yang akan Anda simpan di array. Buat playground baru di Xcode seperti yang kami lakukan di artikel sebelumnya dan tambahkan baris berikut ke playground Anda.
1 |
var array1: Array<String> |
2 |
var array2: [String] |
3 |
var array3 = ["Apple", "Pear", "Orange"] |
Baris kedua adalah singkatan untuk baris pertama. Tanda kurung siku yang membungkus kata kunci String
memberitahu Swift bahwa kita sedang menyatakan sebuah array yang hanya berisi objek String
.
Anda bisa membaca baris kode pertama sebagai "Kami mendeklarasikan sebuah variabel bernama array1
dari tipe Array
yang hanya berisi objek String
." Perhatikan bahwa saya mengutamakan tipe karena itulah yang disebut oleh titik dua.
Baris ketiga menunjukkan kepada kita bagaimana menginisialisasi array menggunakan array literal. Array literal terlihat sangat mirip dengan literal array di Objective-C. Perbedaan utamanya adalah tidak adanya simbol @
yang mendahului tanda kurung siku dan literal string.
Ada juga cara yang bagus untuk menginisialisasi array dengan sejumlah nilai default yang telah ditentukan. Sintaksnya mungkin membingungkan pada awalnya, tapi luangkan waktu untuk memahaminya.
1 |
var a = [String](count: 5, repeatedValue: "Test") |
Array yang dihasilkan berisi lima senar, dengan masing-masing string sama dengan "Test"
. Untuk lebih memahami inisialisasi di atas, lihat dua baris kode berikut di mana kami menginisialisasi rangkaian string kosong.
1 |
var b = Array<String>() |
2 |
var c = [String]() |
Jangan khawatir jika Anda masih bingung. Kita akan mengeksplorasi sintaksnya secara lebih rinci begitu kita mulai berurusan dengan kelas dan fungsi. Pada artikel ini, kami hanya fokus pada koleksi.
Mutability
Salah satu aspek Swift yang akan segera Anda hargai adalah bagaimana cara menyatakan koleksi yang bisa berubah. Potongan kode di atas, misalnya, menyatakan tiga array yang bisa berubah. Sebuah mutable array didefinisikan dengan menggunakan kata kunci var
. Sesederhana itu Jika Anda tidak ingin sebuah array bisa diubah, gunakan kata kunci let
. Swift bertujuan untuk intuitif dan mudah digunakan, dan implementasi mutabilitas Swift adalah contoh sempurna dari tujuan ini.
Mendapatkan dan Menetapkan Nilai
Untuk mengakses nilai yang tersimpan dalam array, kita menggunakan sintaks subscript yang sama seperti pada Objective-C. Pada contoh berikut, kita meminta array3
untuk elemen kedua, string "pear"
.
1 |
array3[1] |
Mengganti nilai yang tersimpan pada indeks 1
adalah sesederhana menetapkan nilai baru menggunakan sintaks subscript yang sama. Pada contoh berikut, kita mengganti "pear"
pada indeks 1
dengan "peach"
.
1 |
array3[1] = "Peach" |
Ini hanya mungkin karena arraynya bisa berubah, artinya kita menggunakan kata kunci var
untuk mendeklarasikan array. Mutasi array konstan tidak mungkin dilakukan. Ada teknik yang lebih maju untuk memanipulasi isi array, namun konsep dasarnya sama.
Menggabungkan dua array sama mudahnya dengan menambahkan keduanya. Dalam contoh berikut, kita mendeklarasikan dan menggabungkan dua array yang tidak berubah. Perhatikan bahwa array yang dihasilkan, c
, tidak perlu diubah untuk bekerja.
1 |
let a = [1, 2, 3] |
2 |
let b = [4, 5, 6] |
3 |
|
4 |
let c = a + b |
Namun, itu adalah kunci bahwa nilai yang tersimpan dalam a
dan b
memiliki tipe yang sama. Alasannya harus jelas sekarang. Nilai yang tersimpan dalam array perlu tipe yang sama. Contoh berikut akan menghasilkan kesalahan.
1 |
let a = [1, 2, 3] |
2 |
let b = [1.5, 5.2, 6.3] |
3 |
|
4 |
let c = a + b |
Untuk menambahkan array ke array yang bisa berubah, kita menggunakan operator +=
. Perhatikan bahwa operan di sebelah kanan adalah array. Operasi ini tidak akan bekerja jika kita menghapus tanda kurung siku sekitar 4
.
1 |
var a = [1, 2, 3] |
2 |
a += [4] |
Operasi
Array adalah objek di mana Anda dapat melakukan berbagai operasi. Array mengekspos sejumlah fungsi atau metode. Untuk memanggil metode pada objek, Anda menggunakan notasi titik. Tambahkan baris berikut ke playground Anda untuk menambahkan item ke array3
.
1 |
array3.append("Cherry") |
Mari kita lihat berapa banyak item yang berisi array3
dengan menerapkan metode count
. Ini menghasilkan 4
di panel hasil di sebelah kanan.
1 |
array3.count |
Ini juga memungkinkan untuk memasukkan item pada indeks tertentu dengan meminta metode insert
array seperti yang ditunjukkan di bawah ini. Metode insert
menerima lebih dari satu parameter dan mungkin terlihat agak aneh pada awalnya.
1 |
array3.insert("Prune", atIndex: 2) |
Seperti Objective-C, Swift mendukung parameter yang diberi nama untuk meningkatkan keterbacaan. Hasilnya adalah kode itu lebih mudah dibaca dan dipahami, dan fungsi atau metode tidak perlu banyak dijelaskan dalam hal apa yang mereka lakukan. Jelas, misalnya, bahwa metode insert
memasukkan elemen pada indeks 2
.
Sementara Swift lebih ringkas dan kurang verbose daripada Objective-C, itu mendukung parameter bernama. Jika Anda berasal dari PHP, Ruby, atau JavaScript, ini pasti sesuatu yang akan membiasakan diri.
Metode Convenience
Yang benar-benar saya nikmati tentang Swift adalah properti convenience mirip Ruby dan metode perpustakaan standar Swift. Sebuah array, misalnya, memiliki properti isEmpty
yang memberitahu Anda jika array berisi elemen. Ini tidak lebih dari singkatan untuk memeriksa properti array count
. Hasilnya, bagaimanapun, adalah kode yang lebih ringkas dan mudah dibaca.
1 |
array3.isEmpty |
2. Dictionary
Dictionary berperilaku sangat mirip dengan dictionary di Objective-C. Dictionary menyimpan koleksi nilai yang tidak teratur. Setiap nilai dalam dictionary dikaitkan dengan sebuah kunci. Dengan kata lain, dictionary menyimpan sejumlah pasangan kunci / nilai.
Tipe
Seperti halnya dengan array, kunci dan nilai yang tersimpan dalam dictionary perlu tipe yang sama. Ini berarti bahwa jika Anda meminta dictionary untuk nilai kunci tertentu, Anda tahu jenis dictionary yang akan dikembalikan.
Deklarasi
Mendeklarasikan dictionary sama dengan mendeklarasikan sebuah array. Perbedaannya adalah Anda perlu menentukan tipe untuk kedua kunci dan nilai. Contoh berikut menunjukkan tiga cara untuk mendeklarasikan dictionary.
1 |
var dictionary1: Dictionary<String, Int> |
2 |
var dictionary2: [String: Int] |
3 |
var dictionary3 = ["Apple": 3, "Pear": 8, "Orange": 11] |
Baris kedua adalah singkatan untuk baris pertama. Kunci kamus ini perlu tipe String
sementara nilainya diharapkan tipe Int
. Kata kunci var
menunjukkan bahwa dictionary dapat diubah.
Anda bisa membaca baris kode pertama sebagai "Kami mendeklarasikan sebuah variabel bernama dictionary1
dari tipe Dictionary
yang hanya berisi kunci tipe String
dan nilai tipe Int
."
Baris ketiga menggambarkan bagaimana kita bisa menginisialisasi kamus menggunakan kamus literal. Ini serupa dengan sintaks yang kita gunakan di Objective-C, namun perhatikan bahwa kurung kurawal digantikan oleh tanda kurung siku dan hurufnya tidak diawali dengan simbol @
.
Mendapatkan dan Menetapkan Nilai
Mengakses nilai sama dengan mengakses nilai array. Satu-satunya perbedaan adalah Anda menggunakan kunci dan bukan indeks nilai yang perlu Anda akses. Contoh berikut menggambarkan hal ini.
1 |
let value = dictionary3["Apple"] |
2 |
println(value) |
Anda akan melihat bahwa Xcode memberi tahu kita bahwa value
nilainya tidak 3
, tapi Optional(3)
. Apa artinya ini? Swift menggunakan opsi untuk membungkus nilai yang bisa menjadi salah satu dari dua hal, nilai atau nil
. Jangan khawatir tentang pilihan pada saat ini. Kita akan fokus pada pilihan di artikel berikutnya dari seri ini. Biarkan saya memberi tahu Anda bahwa opsi adalah konsep kunci lain dari bahasa pemrograman Swift.
Sangat menarik untuk menunjukkan bahwa sintaks untuk mengakses nilai kamus identik dengan array jika kunci kamus adalah tipe Int
. Lihatlah contoh berikut untuk melihat apa yang saya maksud.
1 |
var dictionary4 = [0: "Apple", 1: "Pear", 2: "Orange"] |
2 |
let fruit = dictionary4[0] |
Operasi
Seperti halnya array, perpustakaan standar Swift mendefinisikan berbagai operasi yang dapat Anda lakukan pada kamus. Sebuah dictionary mengembalikan jumlah pasangan kunci / nilai dengan memanggil count
. Melepaskan sepasang kunci / nilai mudah dan intuitif seperti contoh berikut. Tentu saja, ini hanya mungkin jika dictionarynya bisa berubah-ubah.
1 |
dictionary4.removeValueForKey(0) |
Saat Anda mulai belajar Swift, Anda kadang-kadang akan menemukan cuplikan kode yang terlihat aneh atau membingungkan. Lihatlah baris berikut di mana kami pertama kali mendeklarasikan sebuah dictionary dan kemudian menghapus pasangan kunci / nilainya.
1 |
var dictionary = [String: Int]() |
2 |
|
3 |
dictionary["Oranges"] = 2 |
4 |
dictionary["Apples"] = 10 |
5 |
dictionary["Pears"] = 5 |
6 |
|
7 |
dictionary = [:] |
Anda harus mengakui bahwa baris terakhir terlihat agak aneh. Karena Swift mengetahui jenis kunci dan nilai yang bisa disimpan dalam dictionary
, menghapuskan dictionary semudah memasukkan dictionary kosong ke dalamnya.
Tidak perlu menentukan jenis kunci dan nilai dalam kasus ini, karena kita sudah melakukannya saat kita mendeklarasikan dictionary di baris pertama. Ini menunjukkan detail penting lainnya, yaitu jenis nilai yang dapat Anda simpan dalam array dan dictionary tidak dapat berubah begitu koleksi diumumkan.
3. Tuple
Anda akan menyukai tuple. Sementara tuple bukan koleksi, mereka juga mengelompokkan beberapa nilai. Mirip dengan array dan dictionary, tuple bisa mengandung nilai dari jenis apa pun. Perbedaan utamanya, bagaimanapun, adalah bahwa nilai yang tersimpan dalam tuple tidak perlu sama jenisnya. Mari kita lihat sebuah contoh untuk menjelaskan hal ini secara lebih rinci.
1 |
var currency = ("EUR", 0.81) |
2 |
var time = (NSDate(), "This is my message.") |
3 |
var email = ("Bart Jacobs", "bart@example.com") |
Contoh pertama menyatakan sebuah tuple bernama currency
yang bertipe (String, Int)
. Tuple kedua, time, berisi contoh NSDate
dan string literal. Nilai yang tersimpan dalam email
keduanya berupa String
, yang berarti email
adalah tipe (String, String)
.
Mengakses Nilai
Indeks
Untuk mengakses nilai yang tersimpan dalam tuple, Anda menggunakan indeks yang sesuai dengan nilai yang Anda minati.
1 |
var rate = currency.1 |
2 |
var message = time.1 |
3 |
var name = email.0 |
Xcode menunjukkan kepada kita indeks dari setiap nilai yang tersimpan dalam tuple di panel hasil playground di sebelah kanan.



Nama
Untuk meningkatkan keterbacaan, Anda bisa memberi nama nilai yang tersimpan dalam tupel. Hasilnya adalah Anda dapat mengakses nilai tuple melalui nama mereka dan bukan indeks mereka. Mendeklarasikan tuple sedikit berbeda dalam kasus itu.
1 |
var currency = (name: "EUR", rate: 0.81) |
2 |
let currencyName = currency.name |
3 |
let currencyRate = currency.rate |
Penguraian
Ada cara kedua yang lebih elegan untuk bekerja dengan nilai yang tersimpan dalam tuple. Lihatlah contoh berikut di mana kita menguraikan isi currency
.
1 |
let (currencyName, currencyRate) = currency |
Nilai currency
pada indeks 0
disimpan dalam currencyName
dan nilai pada indeks 1
disimpan dalam currencyRate
. Tidak perlu menentukan jenis currencyName
dan currencyRate
sejak Swift menambahkan jenis dari nilai yang tersimpan dalam currency
. dengan kata lain, tipe currencyName
adalah String
dan tipe currencyRate
adalah Float
.
Jika Anda hanya tertarik pada nilai tupel tertentu, Anda dapat menggunakan garis bawah untuk memberi tahu Swift nilai mana yang tidak Anda minati.
1 |
let (currencyName, _) = currency |
Pelajari Lebih Lanjut di Kursus Pemrograman Swift Kami
Bawa pendidikan Swift Anda ke tingkat berikutnya dan pelajari semuanya dari Playground sampai Pemrograman Berorientasi Objek dalam kursus lengkap pengembangan Swift.
Kesimpulan
Array dan dictionary merupakan komponen fundamental hampir setiap bahasa pemrograman Swift dan tidak berbeda. Sementara collection berperilaku sedikit berbeda di Swift, tidak butuh waktu lama untuk mengenal jenis collection Swift jika Anda pernah bekerja dengan array dan dictionary dalam bahasa pemrograman lainnya. Pada tutorial selanjutnya, kita mengeksplorasi optionals dan control flow.