Назначение значений из словаря в структуру - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть структура, заданная примерно так ...

struct CricketerDetail {
  var image: UIImage!
  var name: String!
  var details: String!

  init(image: UIImage, name: String, details: String) {
    self.image = image
    self.name = name
    self.details = details
  }
}

Теперь у меня есть функция, заданная примерно так ...

enter image description here

На скриншоте Common2 задано как

class Common2: NSObject {

  class func generateCricketerDetailList() -> [[String:Any]] {
    return [["name": "Sachin Tendulkar","description":"add descr. here","image": UIImage(named: "Sachin.jpeg")!],["name":"Sourav Ganguly","description":"add descr. here","image":UIImage(named: "sourav.jpeg")!],["name":"Adam Gilchrist","description":"add descr. here","image":UIImage(named: "adam.jpeg")!],["name":"Jonty Rhodes","description":"add descr. here","image":UIImage(named: "adam.jpeg")!],["name":"Wasim Akram","description":"add descr. here","image":UIImage(named: "wasim.jpg")!]]
  }
}

Теперь, как конкретно добавить изображение, имя и детали этого словаря в массив cricketerDetailList, как указано вскриншот? .. * * 1016

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018
let allCricketerDetailList = generateCricketerDetailList()
//inside for loop
let detail = CricketerDetail(name: allCricketerDetailList["name"] as! String.........)

Но я предлагаю инициализировать struct с помощью dicitonary.например,

 struct CricketerDetail {
  var image: UIImage!
  var name: String!
  var details: String!

  init(dict: [String:Any]) {
    self.image = dict["image"] as? UIImage ?? UIImage()
    self.name = dict["name"] as? String ?? ""
    self.details = dict["description"] as? String ?? ""
  }
}

После того, как вы установите такую ​​структуру, как это, вы начнете свою структуру, как показано ниже:

//for loop
cricketerDetailList.append(CricketerDetail(dict: item) //item is coming from your loop
0 голосов
/ 18 декабря 2018

Прежде всего, никогда не объявляет свойства или члены структуры как неявные развернутые необязательные опции, которые инициализируются с необязательными значениями в методе init.

Удалите восклицательные знаки.

struct CricketerDetail {
  var image: UIImage
  var name: String
  var details: String

...

Наиболее эффективный способ сопоставить один тип другому - использовать map

func getAllCricketerDetailList() -> [CricketerDetail] {
    return Common2.generateCricketerDetailList().map { item -> CricketerDetail in
         CricketerDetail(image: item["image"] as! UIImage, name: item["name"] as! String, details: item["description"] as! String)
    }
} 
0 голосов
/ 18 декабря 2018

Я предполагаю, что вы хотите, чтобы значение, связанное с ключом description, было значением свойства details в вашей CricketerDetail структуре.

Вы должны просто получить доступ к словарю, используя ключи и приведениеих для соответствующих типов:

cricketerDetailList.append(
    CricketerDetail(image: item["image"] as! UIImage,
                    name: item["name"] as! String,
                    details: item["description"] as! String))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...