Как пройти через статические константы структуры? - PullRequest
0 голосов
/ 27 января 2019

Я использую R.swift, чтобы получить названия активов.Я создаю библиотеку для проверки дубликатов активов и хочу выполнить итерацию по всем именам активов, чтобы получить данные для проверки дублирования активов. Как я могу выполнить итерацию по статистике в swift.

struct image {
  static let winnerPunyaOrang = Rswift.ImageResource(bundle: R.hostingBundle, name: "Winner Punya Orang")
  static let fire_ico = Rswift.ImageResource(bundle: R.hostingBundle, name: "fire_ico")
  static let fire = Rswift.ImageResource(bundle: R.hostingBundle, name: "fire")
}

1 Ответ

0 голосов
/ 27 января 2019

Есть несколько проблем с вашим решением:

  1. Вы не можете перечислить все изображения без необходимости создавать и поддерживать массив всех значений (что вы не хотите делать),
  2. Тот факт, что вы выделяете изображения для статических переменных, создаст много дополнительной памяти для вашей программы, это будет особенно плохо, если это большие изображения или их много.

Гораздо лучшим подходом было бы использование перечисления CaseIterable.Это позволит расширить код в будущем, используя шаблон, который не приведет к перегрузке памяти и требует минимального обслуживания.

enum ImageAsset: String, CaseIterable {

  //your cases go here...
  case winnerPunyaOrang = "Winner Punya Orang"
  case fireIco = "fire_ico"
  //... and you can continuously extend them by adding more asset names

  //This function will return images as and when you need them
  func image() -> UIImage {
    return Rswift.ImageResource(bundle: R.hostingBundle, name: self.rawValue)
  }
}

Теперь, когда вам нужен актив изображения в программе, вы можете просто позвонить:

let image = ImageAsset.fireIco.image()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...