Soru Tarihçesi:
Subscript, Swift'te koleksiyonlar ve veri yapılarıyla kolay ve güvenli bir şekilde çalışmayı sağlamak için tanıtılmıştır. Ögeleri tanıdık köşeli parantez sentaksı ile erişilebilir hale getirir.
Sorun:
Subscript, yöntemler ve hesaplanan özellikler arasındaki karmaşa, kullanım alanları ve verilerin koleksiyonlar olmadığında veya yan etkileri olduğunda subscript'in hatalı kullanımı.
Çözüm:
Subscript, köşeli parantezler aracılığıyla bir nesnenin elemanlarına erişim sağlamak için özel bir mekanizmadır. Okuma-yazma olabilir ve her türlü parametreyi destekler: yalnızca Int değil, aynı zamanda String veya kendi türlerinizi de alabilir.
Kod örneği:
struct Matrix { private var data: [[Int]] init(rows: Int, columns: Int) { data = Array(repeating: Array(repeating: 0, count: columns), count: rows) } subscript(row: Int, column: Int) -> Int { get { data[row][column] } set { data[row][column] = newValue } } } var matrix = Matrix(rows: 2, columns: 2) matrix[0, 1] = 5 print(matrix[0, 1]) // 5
Anahtar Özellikler:
Subscript birden fazla parametre alabilir mi?
Evet, subscript herhangi bir parametre setini ve türünü (örneğin, tuple) alabilir.
Kod örneği:
// Yukarıdaki Matrix örneğine bakın, burada subscript(row: Int, column: Int)
Sadece okuma için (read-only) bir subscript uygulanabilir mi?
Evet, set tanımlanmıyorsa, subscript sadece okumaya yönelik olacaktır.
Kod örneği:
struct ReadOnlyArray { private let items = [1, 2, 3] subscript(index: Int) -> Int { return items[index] } }
Subscript ile hesaplanan özellik arasındaki fark nedir?
Hesaplanan özellik her zaman sabit bir isme sahiptir ve parametre almaz. Subscript, değişken bir indekse erişim sağlamayı mümkün kılarak koleksiyon yapısını taklit eder.
Özel yapıda subscript, global durumu değiştirmek için kullanılır, bu da bir dizi elemanına basit erişim sırasında beklenmedik yan etkilere yol açar.
Artılar:
Eksiler:
Subscript, yapının içindeki özel bir diziyle çalışmak için yalnızca kullanılır, sınır dışı durumlarda nil döndürme işlemi gerçekleştirilir.
Artılar:
Eksiler: