любые советы или предложения будут оценены! Спасибо!
У меня есть проблема, которую нужно решить, и, похоже, я нигде не могу найти ответ. Некоторый контекст: мы обновляем наше приложение ios, и рабочая версия написана на obj- c, но новые функции пользовательского интерфейса мы разрабатываем на Swift. Поэтому у нас есть словарь с некоторыми значениями для нашей стороны разработки Swift, который содержит много важных данных для пользовательского интерфейса. На данный момент мы просто зацикливаем словарь, чтобы получить значения. Я хочу преобразовать его в быстрый объект, чтобы было легче получить доступ к нужным значениям. Проблема в том, что словарь содержит значения, которые являются вызовами функций и типом UIImage. Каким будет самый разумный способ преобразовать этот словарь в быстрый объект? Словарь:
let dict : [String: Any] = [
"keySelectedMenuButton" : 0,
"keySettButtCallback" : settTapCallback,
"keyInfoButtCallback" : logoTapCallback,
"keyObjectMenuCallback": menuButtonTapCallback,
"buttonListChanged" : doneEditTapCallback,
"keyObjectArray" : [
["keyObjectTitle" : "Home",
// "keyObjectLineImage": UIImage(named: "objektu atskyrimas_4x")!,
"keyObjCtrlButtCollectionArray" : [
["keyCtrlItemTitle" : "Smart Menu",
"keyCtrlItemSubtitle" : "",
//"keyCtrlItemImage" : UIImage(named: "ico_rocket")!,
"keyCtrlObjectAfterTap" : buttonTap1Callback
],
["keyCtrlItemTitle" : "Lock",
"keyCtrlItemSubtitle" : "doors",
//"keyCtrlItemImage" : UIImage(named: "ico_lock_1@x3")!,
"keyCtrlObjectAfterTap" : buttonTapCallback
],
["keyCtrlItemTitle" : "Unlock",
"keyCtrlItemSubtitle" : "Gates",
// "keyCtrlItemImage" : UIImage(named: "ico_lock_0@x3")!,
"keyCtrlObjectAfterTap" : buttonTapCallback
],
["keyCtrlItemTitle" : "Ignore",
"keyCtrlItemSubtitle" : "",
// "keyCtrlItemImage" : UIImage(named: "ico_shield@x3")!,
"keyCtrlObjectAfterTap" : buttonTap1Callback
],
["keyCtrlItemTitle" : "Stop",
"keyCtrlItemSubtitle" : "",
// "keyCtrlItemImage" : UIImage(named: "ico_stop")!
"keyCtrlObjectAfterTap" : buttonTap2Callback
],
["keyCtrlItemTitle" : "State",
"keyCtrlItemSubtitle" : "",
// "keyCtrlItemImage" : UIImage(named: "ico_query@x3")!,
"keyCtrlObjectAfterTap" : buttonTap3Callback
],
["keyCtrlItemTitle" : "Controller",
"keyCtrlItemSubtitle" : "",
// "keyCtrlItemImage" : UIImage(named: "ico_settings_lines")!,
"keyCtrlObjectAfterTap" : buttonTap1Callback
],
["keyCtrlItemTitle" : "Logs",
"keyCtrlItemSubtitle" : "",
// "keyCtrlItemImage" : UIImage(named: "ico_log@x3")!,
"keyCtrlObjectAfterTap" : buttonTap2Callback
],
["keyCtrlItemTitle" : "Notifications",
"keyCtrlItemSubtitle" : "",
// "keyCtrlItemImage" : UIImage(named: "ico_notifications")!,
"keyCtrlObjectAfterTap" : buttonTap3Callback
]]
],
["keyObjectTitle":"Auto",
//"keyObjectLineImage": UIImage(named: "objektu atskyrimas_4x")!,
"keyObjCtrlButtCollectionArray" : [
["keyCtrlItemTitle" : "Smart Menu",
"keyCtrlItemSubtitle" : "",
// "keyCtrlItemImage" : UIImage(named: "ico_rocket")!,
"keyCtrlObjectAfterTap" : buttonTap2Callback
],
["keyCtrlItemTitle" : "Lock",
"keyCtrlItemSubtitle" : "Backdoor",
// "keyCtrlItemImage" : UIImage(named: "ico_lock_1@x3")!,
"keyCtrlObjectAfterTap" : buttonTapCallback
],
["keyCtrlItemTitle" : "Unlock",
"keyCtrlItemSubtitle" : "Fence",
// "keyCtrlItemImage" : UIImage(named: "ico_lock_0@x3")!,
"keyCtrlObjectAfterTap" : buttonTapCallback
],
["keyCtrlItemTitle" : "Ignore",
"keyCtrlItemSubtitle" : "",
// "keyCtrlItemImage" : UIImage(named: "ico_shield@x3")!,
"keyCtrlObjectAfterTap" : buttonTap1Callback
],
["keyCtrlItemTitle" : "Stop",
"keyCtrlItemSubtitle" : "",
// "keyCtrlItemImage" : UIImage(named: "ico_stop")!,
"keyCtrlObjectAfterTap" : buttonTap3Callback
]]
],
["keyObjectTitle":"Basement",
// "keyObjectLineImage": UIImage(),
"keyObjCtrlButtCollectionArray" : [
["keyCtrlItemTitle" : "Smart Menu",
"keyCtrlItemSubtitle" : "",
// "keyCtrlItemImage" : UIImage(named: "ico_rocket")!,
"keyCtrlObjectAfterTap" : buttonTap1Callback
],
["keyCtrlItemTitle" : "Lock",
"keyCtrlItemSubtitle" : "",
// "keyCtrlItemImage" : UIImage(named: "ico_lock_1@x3")!,
"keyCtrlObjectAfterTap" : buttonTapCallback
],
["keyCtrlItemTitle" : "Unlock",
"keyCtrlItemSubtitle" : "",
// "keyCtrlItemImage" : UIImage(named: "ico_lock_0@x3")!,
"keyCtrlObjectAfterTap" : buttonTapCallback
]]
]
]
]
func logoTapCallback(){
print("logo tapped")
}
func menuButtonTapCallback() {
print("menu button tapped ")
}
func buttonTapCallback(){
print("button tapped")
}
func buttonTap1Callback(){
print("button tapped 1")
}
func buttonTap2Callback(){
print("button tapped 2")
}
func buttonTap3Callback(){
print("button tapped 3")
}
func settTapCallback(){
print("settTap")
}
func doneEditTapCallback(){
print("doneEditTap")
}
// Dictionary structure I would like to use:
struct InitialDictionaryStructure {
var keySelectedMenuButton : Int
var keySettButtCallback : ()->Void
var keyInfoButtCallback : ()->Void
var keyObjectMenuCallback : ()->Void
var buttonListChanged : ()->Void
var keyObjectArray : [[Object]]
}
struct Object {
var keyObjectTitle : String
//var keyObjectLineImage : UIImage
var keyObjCtrlButtCollectionArray : [Button]
}
struct Button {
var keyCtrlItemTitle : String
var keyCtrlItemSubtitle : String
//var keyCtrlItemImage : UIImage
var keyCtrlObjectAfterTap : ()-> Void
}