Я искал способ сохранить в быстром словаре строку в качестве ключа и класс в качестве значения
В основном я хочу хранить: [ "view": UIView.self, "сегмент": UISegmentedControl ]
это так, чтобы я мог проанализировать json и сравнить его с параметром с классом, содержащимся в словаре, например:
func checkObject<T>(_ object : T, forKey key : String) -> Bool {
if let d = dictionary_of_string_classes[key], d.self == T.self {
return true
}
return false
}
однако реализация решения ускользает от меня через 2 дня
Любая помощь приветствуется
Я не могу придумать причину, по которой я действительно хотел бы это сделать? но в основном вы можете использовать тип AnyObject, общий родительский класс .. или протокол, общий для всех элементов (более быстрый способ), чтобы делать что-то подобное. вам просто нужно определить, в каких группах эти элементы





Может что-то вроде этого
var dictionary_of_string_classes: [String: NSObject.Type] = [:]
dictionary_of_string_classes["hello"] = UITableView.self
func checkObject<T>(_ object : T, forKey key : String) -> Bool {
if let d = dictionary_of_string_classes[key], d.self is T {
return true
}
return false
}
checkObject(UICollectionView.self, forKey: "hello") //false
checkObject(UITableView.self, forKey: "hello") //true
близко, но не совсем, нужно хранить несвязанные классы, которыми я не владею (у меня уже есть решение, аналогичное вашему). Представьте, что вы пытаетесь сохранить ЛЮБОЙ класс Foundation, UIKit или MapKit.
А как насчет класса NSObject? что-то вроде Dictionary_of_string_classes: [String: NSObject.Type] = [:]
еще раз спасибо за ввод, но он также должен иметь возможность обрабатывать объекты POSO, возможность должна быть встроена в Framework, и любой клиентский код должен иметь возможность регистрировать любой класс, который они хотят (включая их собственный простой класс быстрого доступа)
Что вы думаете об этом решении?
var dictionary_of_string_classes: [String: Any.Type] = [:]
dictionary_of_string_classes["1"] = String.self
dictionary_of_string_classes["2"] = URL.self
func checkObject<T: Any>(_ object : T.Type, forKey key : String) -> Bool {
return dictionary_of_string_classes[key] == object.self
}
print(checkObject(String.self, forKey: "1")) // true
print(checkObject(String.self, forKey: "2")) // false
Можете ли вы использовать тип Any в словаре? Как: Dictionary <String, Any> ()