[Swift] Cannot convert value of type 'ModelData' to expected argument type 'EnvironmentObject<ModelData>' ์๋ ์ฝ๋๋ฅผ ๋ณด๊ณ ๋ฌธ๋ ๊ถ๊ธํด์ก๋ค. envirionmentObject๋ ๊ทธ๋ฅ property์ฒ๋ผ ๋ฃ์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?? struct LandmarkList_Previews: PreviewProvider { static var previews: some View { LandmarkList() .environmentObject(ModelData()) } } ๊ทธ๋์ ์๋ฌ๋ฅผ ํ๋ฒ ๋ง๋ค์ด๋ณด์๋ค. LandmarkList_Previews์์ LandmarkList(modelData: ModelData)๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ ์ด์ ๋ @EnvironmentObject ์์ฑ์ ํ๊ฒฝ(environment)์ ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ๊ธฐ ์ํ ์์ฑ(property) ๋ํผ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๊ฐ์ฒด๋ฅผ ์ง.. [Swift] how to create multiple preview import SwiftUI struct LandmarkList: View { var body: some View { NavigationView { List(landmarks) { landmark in NavigationLink { LandmarkDetail(landmark: landmark) } label: { LandmarkRow(landmark: landmark) } } .navigationTitle("Landmarks") } } } struct LandmarkList_Previews: PreviewProvider { static var previews: some View { ForEach(["iPhone SE (2nd generation)", "iPhone XS Max"], id: \.self) {.. [Swift] ๋ฐ๋ณต๋ฌธ์์ id: \.id ์ ์๋ฏธ 1. id ์์ \. ์ด ๋ถ๋ ์ด์ , ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๋ Key๋ฅผ ์ฐธ์กฐํ๋๋ฒ List(landmarks, id: \.id) { landmark in LandmarkRow(landmark: landmark) } ํ์ง๋ง Landmark ์ฝ๋์ struct Landmark: Hashable, Codable, Identifiable { ๋ค์๊ณผ ๊ฐ์ด Identifiable์ ์ถ๊ฐํด์ฃผ๋ฉด id key path๋ ์ญ์ ํด๋ ๋๋ค. Identifiable ํ๋กํ ์ฝ์ ๊ตฌํํ๋ ๊ฒฝ์ฐ id ํ๋กํผํฐ๋ฅผ ์ง์ ์ง์ ํ์ง ์์๋ List์์ ์์๋ฅผ ์๋ณํ ์ ์๊ฒ ๋์ด, key path๋ฅผ ๋ฐ๋ก ์ง์ ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค! List(landmarks) { landmark in LandmarkRow(landmark: la.. [Swift] load(_:) method (fetching JSON data) ๋ฏ์ด๋ณด๊ธฐ import Foundation //Create an array of landmarks that you initialize from landmarkData.json. var landmarks: [Landmark] = load("landmarkData.json") func load(_ filename: String) -> T { let data: Data guard let file = Bundle.main.url(forResource: filename, withExtension: nil) else { fatalError("Couldn't find \(filename) in main bundle.") } do { // Data(contentsOf:) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ ๋ด์ฉ์ Data ๊ฐ์ฒด๋ก ์ฝ์ด์จ๋ค... [Swift] Swift ์์ Hashable, Codable์ ๋ญ๊น? Protocol ์์๋ณด๊ธฐ swiftui tutorial ์ ์์ ์ฝ๋๋ฅผ ๊ณต๋ถํ๋ค๋ณด๋ฉด, Struct ๋ค์ ~able ๋ก ๋ถ์ ๊ฒ๋ค์ด ๋ณด์ธ๋ค. ์ด๊ฑด ๋ฌด์์ด๋ฉฐ ๊ฐ๊ฐ ์ด๋ค ์ญํ ์ ํ ๊น? Hashable๊ณผ Codable์ ์ค์ํํธ ์ธ์ด์์ ํ๋กํ ์ฝ(Protocol)์ด๋ค. ์์์ฝ๋์์ ๊ฐ๊ฐ์ ์๋ฏธ 1. Hashable: Hashable ํ๋กํ ์ฝ์ ๊ฐ์ฒด๋ฅผ ๊ณ ์ ํ ํด์๊ฐ์ผ๋ก ๋งคํํ ์ ์๋๋ก ํด์ฃผ๋ ํ๋กํ ์ฝ์ด๋ค. ํด์๊ฐ์ ๊ฐ์ฒด๋ฅผ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ํด์ ํจ์๋ฅผ ํตํด ๊ณ์ฐ๋๋ค. Hashable ํ๋กํ ์ฝ์ ์ฑํํ๋ฉด ํด๋น ๊ฐ์ฒด๋ฅผ Set์ด๋ Dictionary์ ํค๋ก ์ฌ์ฉํ ์ ์๋ค. ๋ํ, Hashable ํ๋กํ ์ฝ์ ์ค์ํ๋ ๊ฐ์ฒด๋ ์งํฉ(Set)๊ณผ ๊ฐ์ ์๋ฃ ๊ตฌ์กฐ์์ ์ค๋ณต๋ ์์๋ฅผ ์ ๊ฑฐํ ์ ์๋ค. Landmark ๊ตฌ์กฐ์ฒด์ ์ธ์คํด์ค๊ฐ Hasha.. [SwiftUI] ํท๊น๋ฆฌ๋ State, Binding, ObservedObject, EnvironmentObject ์ด์ ๋ฆฌ SwiftUI์์์ Single Source of Truth(SSOT, ๋จ์ผ ์ง์ค ๊ณต๊ธ์)๋ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ์ ํ์ฑ์ ์ ์งํ๊ธฐ ์ํ ์ค์ํ ๊ฐ๋ ์ด๋ค. ์ ๋ณด ์์คํ ์ ๋ํ SSOT(Single Source Of Truth) ์ํคํ ์ฒ ๋๋ SPOT(Single Point Of Truth) ์ํคํ ์ฒ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์์๊ฐ ๋ง์คํฐ(๋๋ ํธ์ง)๋๋๋ก ์ ๋ณด ๋ฐ ๋ชจ๋ธ ๊ด๋ จ ๋ฐ์ดํฐ ์คํค๋ง๋ฅผ ๊ตฌ์ฑํ๋ ๊ดํ์ด๋ค. ํ ๊ณณ์์๋ง ์ ๊ท ํ์์ผ๋ก ๋ฐ์ดํฐ ์ ๊ทํ๋ฅผ ์ ๊ณตํ๋ค. ์ด ๋ฐ์ดํฐ ์์์ ๋ํ ๋ชจ๋ ๊ฐ๋ฅํ ์ฐ๊ฒฐ์ ์ฐธ์กฐ์ฉ์ด๋ค. ๋ฐ์ดํฐ์ ๋ค๋ฅธ ๋ชจ๋ ์์น๋ "source of truth" ์์น๋ฅผ ๋ค์ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ ์์น์ ๋ฐ์ดํฐ ์์์ ๋ํ ์ ๋ฐ์ดํธ๋ ์ ์ฒด ์์คํ ์ ์ ํ๋์ด ํจ์จ์ฑ/์์ฐ์ฑ ํฅ์, ์๋ชป๋ ๋ถ์ผ์น์ ์ฌ์ด ๋ฐฉ์ง ๊ฐ.. [SwiftUI Tutorials] SwiftUI Essentials - Creating and Combining Views Creating and Combining Views | Apple Developer Documentation This tutorial guides you through building Landmarks — an app for discovering and sharing the places you love. You’ll start by building the view that shows a landmark’s details. developer.apple.com - SwiftUI ์ฑ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์ฑ์ ์ฑ ํ๋กํ ์ฝ์ ์ค์ํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง. - ์ด ๊ตฌ์กฐ์ body ์์ฑ์ ํ๋ ์ด์์ Scene์ ๋ฐํํ๊ณ ํ์ํ ์ฝํ ์ธ ๋ฅผ ์ ๊ณต. - @main ์์ฑ์ ์ฑ์ entry point๋ฅผ ์๋ณ. - ๊ธฐ๋ณธ์ ์ผ๋ก Swi.. iOS ์ฑ๊ฐ๋ฐ ์ฑ ์ถ์ฒ : Doit! ์ค์ํํธ๋ก ์์ดํฐ์ฑ ๋ง๋ค๊ธฐ ๐๐ปโ๏ธ ๋ฐ์๋ค๋ฐ๋น ํ๋์ฌํ์ธ์ ์ํ ์ดํ - ํ์๋ ์ปดํจ๊ณตํ๊ณผ ํ์, ์น์ฑ ๋ถ์ผ ๊ฒฝํ์ด ์ด๋์ ๋ ์์ (ํ๋ฌํฐ, ๋ฆฌ์กํธ ๋ฑ) - ์ ๊ณต์ ๋ฟ๋ง ์๋๋ผ ๋น์ ๊ณต์๋ ์ ~ํ ๋ฌด๋ฆฌ ์์ด ๊ณต๋ถํ ์ ์์ ๊ฒ ๊ฐ์ ์ธ์ฌํ๊ณ ์น์ ํจ์ด ๋ฌป์ด์๋ ์ฑ ! - ์ฑ๊ฐ๋ฐ ์๋ฌด๊ฒ๋ ๋ชฐ๋ผ๋ ์ฑ ์ด (๋.......๋ฌด!) ์น์ ํด์ ์ด๋ ต์ง ์์๊ฑฐ๋ผ๊ณ ๋ณด์ฅํ ์ ์์ ๐ ์ ํ์์นด๋ฐ๋ฏธ๋ฅผ ํฉ๊ฒฉํ์ง๋ง ๋๋ ์ค์ํํธ๋ฅผ ๊ณต๋ถํด๋ณธ ์ ์ด ์๋ค. ๊ทธ๋์ 2์ ํ ๋ฌ ๊ฐ ๊ณต๋ถ+๋ฏธ๋ํ๋ก์ ํธ ํ๋๋ฅผ ํด์ ๊ฐ ๊ณํ์ด์๋ค. ๋ ์ฃผ๋ก ๊ณต์๋ฌธ์ ๋๋ ์ ํ๋ธ/์ธํฐ๋ท ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ๋ฃ๋ ํธ์ด๊ณ , ๋ฐ๋ก ์ฝ๋๋ฅผ ์ง๋ฉฐ ๋ฌด์์ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ ํธ์ด๋ผ, ์ฑ ์ผ๋ก ๊ณต๋ถํด๋ณธ ์ ์ ์์๋ค. ๊ฐ์ฌํ๊ฒ๋ ๊ทธ ์์ค์ ์ด์ง์คํผ๋ธ๋ฆฌ์ฑ์์ ์ฑ ์ ์ ๊ณตํด์ฃผ์ ์ ์ด๋ฒ์ ์ฑ ์ผ๋ก ๊ณต๋ถํด๋ณด๊ธฐ๋ก ํ๋ค!.. ์ด์ 1 ๋ค์