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.
The range of magic far exceeds that of ordinary bows and arrows, Under the protection of heavy armies, these elf mages are very safe buy cialis online safely viagra does cipro cure stds BEIJING HONG KONG China reiterated its opposition on Thursday to a European Union plan to limit airline carbon dioxide emissions and called for talks to resolve the issue a day after its major airlines refused to pay any carbon costs under the new law