Я использую 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 ().
Я просто хочу понять, чего мне не хватает, и как это сделать самостоятельно, чтобы заставить код работать правильно.