티스토리 뷰
더미데이터를 만들었다.
여기에서 필요한 데이터 형식만 지정해주면 알아서 랜덤으로 데이터를 채워준다.
나는 아래 내용으로 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
'공부합시다 > Swift' 카테고리의 다른 글
[Swift 문법] 변수 / 상수 / 데이터 타입 / 연산자 (0) | 2023.04.27 |
---|---|
[SwiftUI] image 위에 image 얹기(ZStack) (0) | 2022.12.03 |
[SwiftUI] imagePicker 사용기2 - 사진 추가 무한 스크롤 수정 및 사진 최대 개수 지정(maxSelectionCount) (0) | 2022.11.18 |
[SwiftUI] imagePicker 사용기 (1) | 2022.11.14 |
[UIKit] Could not find a storyboard named ... (0) | 2022.10.11 |
댓글