티스토리 뷰

더미데이터를 만들었다.

여기에서 필요한 데이터 형식만 지정해주면 알아서 랜덤으로 데이터를 채워준다.

나는 아래 내용으로 50개의 데이터를 만들었다.

id Int  해당 데이터의 고유 id, 1씩 증가함.
title String 해당 데이터의 제목
subject Int 분류
address String street address(랜덤 생성이다보니 실제 위도, 경도와 다를 수 있음)
latitude Double 위도
longitude Double 경도

 

1. Bundle 만들기

Bundle을 extension으로 만들면 함수에서 호출했을 때 언제든지 사용할 수 있다.

import Foundation

extension Bundle {
    func decode<T: Decodable>(file: String) -> T {
        guard let url = self.url(forResource: file, withExtension: nil) else {
            fatalError("Could not find \(file) in project")
        }
        
        guard let data = try? Data(contentsOf: url) else {
            fatalError("Could not find \(file) in project")
        }
        
        let decoder = JSONDecoder()
        guard let loadData = try? decoder.decode(T.self, from:data) else {
            fatalError("Could not find \(file) in project")
        }
        
        return loadData
    }
}

 

2. Model 만들기

모델은 여기에 해당 JSON 파일을 넣어주면 알아서 만들어준다.

일부 가공이 필요하지만 세상편하니까 사용하도록 하자!

import Foundation
import CoreLocation

// MARK: - MockDatum
struct MockDatum: Codable, Identifiable {
    let id: Int
    let title: Title
    let subject: Int
    let address: String
    let latitude, longitude: Double
    var coordinate: CLLocationCoordinate2D {
        CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
      }
    
    static let allData: [MockDatum] = Bundle.main.decode(file: "MockData.json") // 프로그램 전체에서 사용 할 수 있도록 함.
    static let sampleData: MockDatum = allData[0] // 빠른 UI 예제를 위해 1번째 데이터를 사용하도록 만듦.
}

enum Title: String, Codable {
    case dr = "Dr"
    case honorable = "Honorable"
    case mr = "Mr"
    case mrs = "Mrs"
    case ms = "Ms"
    case rev = "Rev"
}

 

3. View 만들기

import SwiftUI

struct ListView: View {
    private var mockDatas: [MockDatum] = MockDatum.allData
    
    var body: some View {
        NavigationView {
            List{
                ForEach(mockDatas, id: \.id) {
                    mockDatum in
                    Text("\(mockDatum.title.rawValue)")
                }
            }
        }
    }
}


struct ListView_Previews: PreviewProvider {
    static var previews: some View {
        ListView()
    }
}

 

이렇게 하면

리스트가 만들어졌다!

 

참고 링크

반응형
LIST
댓글
링크
공지사항
최근에 올라온 글