Как проверить, есть ли значение в словаре? - PullRequest
0 голосов
/ 22 декабря 2018

Я использую Alamofire и SwiftyJSON и хочу проверить, содержит ли ответ значение, которое я введу в строку поиска.

Я только что получил весь файл JSON из 1666 объектов и добавляюэто в мой массив объектов, а затем я ищу значение, но это занимает слишком много времени.

func parseJSON(json: JSON, parse: ParseType) {
  var i = 0
  var j = 0
  switch parse {
    case .group:
      for elements in json["groups"] {
        if let groupId = json["groups"][i]["id"].int {
          let groupName = json["groups"][i]["name"].string
          // print(groupId)
          let group = Groups(id: groupId, name: groupName!)

          groupsArray.append(group)
          i += 1
        } else {
          print("Error can't parse JSON")
        }
      }

      func getGroupsData(url: String, groupName: String) {
      Alamofire.request(url, method: .get).responseJSON { (response) in
        if response.result.isSuccess {
          print("Is Success")
          let json = JSON(response.result.value)
          self.parseJSON(json: json, parse: .group)
          if let group = self.groupsArray.first(where: {$0.name == groupName}) {
            print("found \(group)")
            let searchScheduleUrl = url + "\(group.id)"
            self.getGroupSchedule(url: searchScheduleUrl)
          } else {
            print("Can't find group")
          }
        } else {
          print(response.result.error)
        }
      }
    } 

А вот JSON :

{
 "groups" : [
   {
    "faculty" : {
    "id" : 101,
    "abbr" : "ИнГО",
    "name" : "Гуманитарный институт"
  },
  "id" : 26262,
  "spec" : "47.06.01 Философия, этика и религиоведение",
  "kind" : 3,
  "level" : 3,
  "name" : "33865\/4702",
  "type" : "common"
},
{
  "faculty" : {
    "id" : 95,
    "abbr" : "ИКНТ",
    "name" : "Институт компьютерных наук и технологий"
  },
  "id" : 27432,
  "spec" : "09.03.04 Программная инженерия",
  "kind" : 0,
  "level" : 1,
  "name" : "в13534\/22",
  "type" : "evening"
},
{
  "faculty" : {
    "id" : 92,
    "abbr" : "ИСИ",
    "name" : "Инженерно-строительный институт"
  },
  "id" : 26322,
  "spec" : "08.06.01 Техника и технологии строительства",
  "kind" : 3,
  "level" : 1,
  "name" : "13163\/0801",
  "type" : "common"
}, and so on...

Iнапример, хочу проверить:
если имя: "13541/1" в словаре и если это так, я хочу получить его идентификатор

1 Ответ

0 голосов
/ 22 декабря 2018

Можно попробовать

struct Root: Codable {
    let groups: [Group]
}

struct Group: Codable {
    let faculty: Faculty
    let id: Int
    let spec: String
    let kind, level: Int
    let name, type: String
}

struct Faculty: Codable {
    let id: Int
    let abbr, name: String
}

do {
    let res = try JSONDecoder().decode(Root.self,from:data) 
    if let item = res.groups.first(where:{  $0.name == YourName }) {
      print(item.id)
    }
}
catch {
  print(error)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...