我在使用JSON数据填充的ViewController中拥有TableView:
以下是JSON的结构,包括以下部分:
struct TabSections {
let name : String
let collection : [TabCollection]
}
struct TabCollection: Decodable {
let number, person, status: String
let maker: String
}
以下是TableView和选项卡如何填充JSON数据的方法:
var sections = [TabSection]()
private func fetchJSON() {
guard let url = URL(string: "https://example.com/example/example.php"),
let value = name.addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed)
else { return }
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = "name=\(value)".data(using: .utf8)
URLSession.shared.dataTask(with: request) { data, _, error in
guard let data = data else { return }
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let res = try decoder.decode([TabCollection].self, from: data)
let grouped = Dictionary(grouping: res, by: { $0.status })
let keys = grouped.keys.sorted()
self.sections = keys.map({TabSections(name: $0, collection: grouped[$0]!)})
DispatchQueue.main.async {
self.receiptTableView.reloadData()
}
}
catch {
print(error)
}
}.resume()
}
错误发生在numberOfRowsInSection
下,并在定义节的第一行停止:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let section = sections[section]
return section.collection.count
}
我似乎无法理解为什么我在行Index out of range
上收到let section
答案 0 :(得分:0)
很可能您没有from django.template import loader
...
def view(request):
messages.info(
request,
loader.render_to_string(
'app/fragments/google_link.html',
{},
request=request,
),
)
方法,这意味着表视图默认为1部分。由于您的数据模型最初不能包含任何元素,因此您需要实现numberOfSections
以返回numberOfSections
中的元素数。
sections
答案 1 :(得分:0)
您可以将该扩展名用于column-number
,以便安全地从集合中检索元素。
if clause
所以您的Collection
看起来像这样:
extension Collection {
/// Returns the element at the specified index if it is within bounds, otherwise nil.
subscript (safe index: Index) -> Element? {
return indices.contains(index) ? self[index] : nil
}
}