xcodeでアプリを作っている際、jsonファイルの読み込み込みができず下記のようなエラーが出ます。
jsonファイルの内容の紐付けができません。
色々調べてみましたが、解決方法が見つからず困っています。解決方法を教えていただければ幸いです。
以下にjsonファイル、jsonファイルに対する構造体を定義したswiftファイル、jsonを読み込んだswiftファイル、ビルドしたいswiftファイルを挿入します。
(1) jsonファイル
json
1[ 2 { 3 "id":"1", 4 "type": "日常", 5 "imageName": "situation1", 6 "quiz":[ 7 { 8 "id":"001", 9 "title":"ljlajg", 10 "explain": "awggj", 11 "OKans": "nglegnkgkgb", 12 "BADans": "kngln", 13 "favorite": false 14 } 15 ] 16 }, 17 { 18 "id":"2", 19 "type": "学校", 20 "imageName": "situation2", 21 "quiz":[ 22 { 23 "id":"001", 24 "title":"ljlajg", 25 "explain": "awggj", 26 "OKans": "nglegn", 27 "BADans": "kngln", 28 "favorite": false 29 } 30 ] 31 }, 32 { 33 "id":"3", 34 "type": "旅行", 35 "imageName": "situation1", 36 "quiz":[ 37 { 38 "id":"001", 39 "title":"ljlajg", 40 "explain": "awggj", 41 "OKans": "nglegn", 42 "BADans": "kngln", 43 "favorite": false 44 } 45 ] 46 } 47]
(2) jsonファイルに対する構造体を定義したswiftファイル
swift
1import SwiftUI 2 3struct Situation : Codable,Identifiable { 4 public var id: String 5 public var type: String 6 public var imageName: String 7 public var image: Image { Image(imageName) } 8 public var quiz: Quiz 9} 10 11struct Quiz : Codable,Identifiable { 12 public var id: String 13 public var title: String 14 public var explain: String 15 public var OKans: String 16 public var BADans: String 17 public var favorite: Bool 18}
(3) jsonを読み込んだswiftファイル
swift
1import Foundation 2 3struct QuizStore { 4 let quizs: [Situation] = load("situation.json") 5} 6 7let quizStore = QuizStore() 8 9func load<T: Decodable>(_ filename: String, as type: T.Type = T.self) -> T { 10 let data: Data 11 12 guard let file = Bundle.main.url(forResource: filename, withExtension: nil) 13 else { 14 fatalError("Couldn't find (filename) in main bundle.") 15 } 16 17 do { 18 data = try Data(contentsOf: file) 19 } catch { 20 fatalError("Couldn't load (filename) from main bundle:\n(error)") 21 } 22 23 do { 24 let decoder = JSONDecoder() 25 decoder.dateDecodingStrategy = .iso8601 26 return try decoder.decode(T.self, from: data) 27 } catch { 28 fatalError("Couldn't parse (filename) as (T.self):\n(error)") 29 } 30}
(3) ビルドしたいswiftファイル
swift
1import SwiftUI 2 3struct ChooseView: View { 4 var items: [Situation] 5 6 var body: some View { 7 NavigationView { 8 VStack { 9 ForEach(self.items) { item in 10 ZStack{ 11 NavigationLink(destination: DetailView()) { 12 item.image 13 .resizable() 14 .frame(width: 155, height: 155) 15 16 } 17 Text(item.type) 18 .font(.largeTitle) 19 } 20 } 21 } 22 .navigationBarTitle("bu") 23 } 24 } 25} 26 27 28struct ChooseView_Previews: PreviewProvider { 29 static var previews: some View { 30 ChooseView(items: quizStore.quizs) 31 } 32} 33
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/03 04:51