Я использую в приложении Mapbox Maps iOS SDK v10, и у меня есть слой, который отображает на карте круги, обозначающие расположение различных объектов. Каждый объект имеет несколько свойств, включая строковый «тип», например «АВТОМОБИЛЬ», «ЛОДКА», «САМОЛЕТ» и т. д. Я использую выражение цвета, чтобы определить, какого цвета должен быть каждый круг, на основе значения «типа» объекта. особенность. В настоящее время это выражение строится следующим образом:
Код: Выделить всё
let colorExpression = Exp(.match) {
Exp(.get) { "type" }
"CAR"
UIColor.systemBlue
"BOAT"
UIColor.systemRed
"AIRCRAFT"
UIColor.systemGreen
UIColor.systemGray // default color if some other "type" value
}
Поначалу это работало достаточно хорошо, поскольку существовало ограниченное количество значений для свойства «тип» объекта, поэтому жесткое кодирование этих значений было работоспособным решением. Однако данные объектов поступают с сервера, и время от времени вводятся новые «типы» объектов. Поэтому вместо того, чтобы добавлять дополнительные жестко закодированные значения типов и создавать новую сборку приложения каждый раз, когда это происходит (о чем я не всегда знаю заранее), я бы хотел иметь возможность создавать это выражение «динамически». " используя данные, которые я получаю обратно от вызова API на сервер.
Например, предположим, что после десериализации у меня есть типы и значения UIColor в словаре, например:
Код: Выделить всё
var typeColors: [String: UIColor] = [
"CAR" : UIColor.systemBlue,
"BOAT" : UIColor.systemRed,
"AIRCRAFT" : UIColor.systemGreen,
"BICYCLE" : UIColor.systemYellow
]
Я хотел бы перебрать этот словарь и построить выражение цвета, используя эти пары ключ-значение. Что-то вроде:
Код: Выделить всё
var typeColorArray: [Any] = []
for (k, v) in typeColors {
typeColorArray.append(k)
typeColorArray.append(v)
}
let colorExpression = Exp(.match) {
Exp(.get) { "type" }
typeColorArray
UIColor.systemGray // default color if some other "type" value
}
Документация Mapbox iOS SDK не очень многословна в отношении выражения DSL, и мне не удалось найти подобный пример в примерах, размещенных в репозитории GitHub (https:// github.com/mapbox/mapbox-maps-ios/tree/main/Apps/Examples/Examples/All%20Examples). Кто-нибудь знает, возможно ли создать такое цветовое выражение?
Подробнее здесь:
https://stackoverflow.com/questions/774 ... os-sdk-v10