我有一個JSON檔案:
{
"bookStruct"/span>:
{
"bookInfo": [
{
"name": "Greenlight",
"genre": "R&B",
"imagename": "greenlight.png".
}
],
"bookAudio": [
{
"name" : "BigBang",
"儀器" :"Arp"。
"bookSong" : "bigBang.mp3",
},
{
"name"/span> : "Boolll"/span>,
"樂器" :"鼓"。
"bookSong" : "Boolll.mp3",
},
{
"name" : "Kreker"。
"樂器" :"鼓",
"bookSong" : "Kreker.mp3",
}
]
}
}
我需要知道,我怎樣才能決議這兩個陣列bookInfo和bookAudio。我已經嘗試了類似的方法,但它只決議了其中一個陣列:
struct BookDesc。Decodable {
let bookStruct: BookStruct struct BookStruct: Decodable {
let bookInfo: [BookInfo]
let bookAudio: [BookAudio]。
}
struct BookAudio: Decodable {
let name: String[/span]。
let instrument: String
let bookSong: String
}
struct BookInfo: Decodable {
let name: String[/span]。
let genre: String[/span]>
let imagename: String
}
var booksCollect = [BookInfo]()
func parseBooks() -> [BookInfo] {
let fileManager = FileManager.default
let path = Bundle.main.resourcePath
let enumerator:FileManager.DirectoryEnumerator = fileManager.enumerator(atPath: "(path!)/BooksFolders")!
while let element = enumerator.nextObject() as? String {
if element.hasSuffix(".json") { // check the extension
print(Element)
}
}
var booksNames = [BookInfo]()
guard let urls = Bundle. main.urls(forResourcesWithExtension:".json", subdirectory:nil) else {
return booksNames
}
for url in urls {
do {
let bookDesk = try parseLoop(url: url)。
booksNames.append(contentsOf: bookDesk.bookInfo)
} catch {
print("(error) reading (url)")
}
}
return loopsInfo
}
func parseLoop(url: URL) throws -> BookStruct {
let jsonData = try Data(contentOf: url)
let bookTop = try JSONDecoder() 。 decode(BookDesc.self, from: jsonData)
return bookTop.bookDesk
}
func prepareInit() {
booksCollect = parseBooks()
tableView.reloadData()
}
uj5u.com熱心網友回復:
這是我的解決方案。請注意,我把url處理部分移到了一個單獨的函式中,以使發布的代碼更清晰
。var bookInfoCollect = [BookInfo]()
var bookAudioCollect = [BookAudio]()
//...
func parseBooks() -> [BookStruct] {
let urls = getUrls()
var books = [BookStruct]()
for url in urls {
do {
let bookDesk = try parseLoop(url: url)。
books.append(bookDesk)
} catch {
print(error)
}
}
return books
}
func prepareInit() {
let books = parseBooks()
bookInfoCollect = books.flatMap(.bookInfo)
bookAudioCollect = books.flatMap(.bookAudio)
print(bookInfoCollect)
print(bookAudioCollect)
//tableView.reloadData()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/314863.html
標籤:
上一篇:顯示部門名稱的查詢經理部門名稱
