У меня есть класс Singleton:доступ к свойству Singleton по индексу в Swift
class Session {
static let sharedInstance = Session()
private init() {}
// app properties
var token: String!
var promotions: JSON!
}
В классе сетей у меня есть несколько асинхронных вызовов, которые я выпалить используя map
функции для каждого URL:
let urls = [ "promotions": "http:..." ]
let results = urls.map { (k, url) in
self.getFromApi(url, params: ["token" : token]) { response in
guard response as? JSON != nil else { return }
Session.sharedInstance[k] = response
// the above should compile to Session.sharedInstance["promotions"] = response.
}
Проблема заключается в попытке установить ответ на sharedInstance по индексу. Я попытался реализовать подстрочный на Singleton без толка:
subscript(property: Any) -> Any {
get {
return Session.sharedInstance[property]
}
set(newValue) {
Session.sharedInstance[property] = newValue
}
}
Я также попытался отказаться от индексации через соответствие NSObject
и использование KVC
однако это также не работает & кроме того я потеряю все типы безопасность.
Любая помощь или совет очень ценится. Спасибо заранее.
для чего нужен индекс? Я предполагаю, потому что у вас есть гораздо больше свойств, таких как «акции»? –
также не нужно: 'Session.sharedInstance [property] = newValue' just use:' self. [Property] = newValue' Тогда также становится ясно, что вы создаете рекурсивный индекс. –