Как отобразить данные из JSON в алфавитных разделах Swift? - PullRequest
0 голосов
/ 21 октября 2019

Я использую JSONParsing для отображения моих данных при поиске по запросу. Теперь я хочу перечислить все эти термины в алфавитном списке. Но у меня проблемы с получением кода для правильной работы. Я реплицировал некоторый код от кого-то другого, у которого была такая же проблема, и он получил это, но у меня возникают проблемы с реализацией моего собственного кода.

В настоящее время я анализирую свой JSON с этим кодом:

    func parseJSONSignDictionary() {

        if let url = Bundle.main.url(forResource: "csvjson", withExtension: "json") {
        do {
            let date = Date()
            let data = try Data(contentsOf: url)
            if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String:Any] {

                (json["results"] as? [[String:Any]])?.forEach { j in
                    if let name = j["identifier"] as? String, let id = j["id"] as? Int {


                        let sign = Signs(name: name, number: id)
                        signsArray.append(sign)
                    }
                }

            }
            print("Took", Date().timeIntervalSince(date))
        } catch {
            print(error.localizedDescription)
        }
    }

}

Изменить, чтобы добавить еще код, это мой класс Signs, который заменит ресторанный массив / класс:

class Signs: NSObject, Decodable, NSCoding {



private var _signName: String!
private var _signNumber: Int!


var signName: String {
    return _signName
}

var signNumber: Int {
    return _signNumber
}



func encode(with aCoder: NSCoder) {
    aCoder.encode(signName, forKey: "signNameKey")
}

required init?(coder aDecoder: NSCoder) {
    print("Trying to turn Data into Sign")
    self._signName = aDecoder.decodeObject(forKey: "signNameKey") as? String
}

init(name: String, number: Int) {

    self._signName = name
    self._signNumber = number
}

}

Код из другого StackOverflow, которыйЯ пытаюсь использовать отсюда. вопрос: Отображение данных из JSON в алфавитных разделах в табличном представлении в Swift

func makeDataSource(names:[String:[AnyObject]]) {
    var dict = [String:[Restaurant]]()
    let letters = NSCharacterSet.letters
    for (_,value) in names {
        //Iterating Restaurants
        for resObj in value {
            if let restaurantName = resObj["name"] as? String {
                let restaurant = Restaurant(name: restaurantName)
                var key = String(describing: restaurant.name.first!)

                //To check whether key is alphabet or not
                key = isKeyCharacter(key: key, letters: letters) ? key : "#"

                if let keyValue = dict[key] {
                    //Already value exists for that key
                    var filtered = keyValue
                    filtered.append(restaurant)

                    //Sorting of restaurant names alphabetically
                    //filtered = filtered.sorted(by: {$0.0.name < $0.1.name})
                    dict[key] = filtered
                } else {
                    let filtered = [restaurant]
                    dict[key] = filtered
                }
            }
        }
    }
    //To sort the key header values
    self.dataArray = Array(dict).sorted(by: { $0.0 < $1.0 })

    //Logic to just shift the # category to bottom
    let temp = self.dataArray[0]
    self.dataArray.removeFirst()
    self.dataArray.append(temp)

    self.indexTitles = Array(dict.keys.sorted(by: <))
    let tempIndex = self.indexTitles[0]
    self.indexTitles.removeFirst()
    self.indexTitles.append(tempIndex)


}

У меня есть собственный массив, который заменит Restaurant, называется Signs.

            if let restaurantName = resObj["name"] as? String {

Мне также интересно, откуда взято это "имя"? Это массив / модель с именем var?

Я не уверен, поскольку у меня есть способ доступа к данным JSON с помощью моей собственной функции, если мне даже нужно попробовать использовать функцию getdata ().

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

...