Swift 4.1 ile birlikte sınıflarımız için subscript metodları tanımlayabiliyorduk, bu şekilde tırnak işareti kullanarak içerikleri özelleştirilmiş olarak çağrılabiliyor.
class Person { let name: String let age: Int private let details: [String: String] init(name: String, age: Int, details: [String: String]) { self.name = name self.age = age self.details = details } subscript(key: String) -> String { switch key { case "info": return "\(name) is \(age) years old." default: return details[key] ?? "" } } } let details = ["title": "Author", "instrument": "Guitar"] let me = Person(name: "Cosmin", age: 32, details: details) me["info"] // "Cosmin is 32 years old." me["title"] // "Author"
yeni gelen @dynamicMemberLookup özelliği ile nasıl olduğuna bakalım
// 1 @dynamicMemberLookup class Person { let name: String let age: Int private let details: [String: String] init(name: String, age: Int, details: [String: String]) { self.name = name self.age = age self.details = details } // 2 subscript(dynamicMember key: String) -> String { switch key { case "info": return "\(name) is \(age) years old." default: return details[key] ?? "" } } } // 3 me.info // "Cosmin is 32 years old." me.title // "Author"
// 1
Sınıfı tanımlarken @dynamicMemberLookup kullanıyoruz, böylece o sınıf için “dot syntax”ı aktifleştirmiş oluyoruz.
// 2
subscript metodunu tanımlarken parametrenin başına dynamicMember yazıyoruz.
// 3
artık sadece tanımladığımız sınıfın sonuna . (nokta) koyarak property kullanır gibi subscript içeriklerine erişebiliriz.