๐Ÿ”ฅ SwiftUI๋Š” ์„ ์–ธํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š”๊ฒƒ์„ ์„ ์–ธํ•˜๋ฉด SwifUI๊ฐ€ ์ž๋™์œผ๋กœ ๊ณ„์‚ฐํ•˜์ง€๋งŒ, SwiftUI๊ฐ€ ๋’ค์—์„œ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ์ข€ ๋” ์ดํ•ดํ•˜๊ณ  ๋” ์ž˜ ํ™œ์šฉํ•ด๋ณด์ž

โญ๏ธ SwiftUI๋Š” ID, LifeTime, Dependency๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•  ์‚ฌํ•ญ, ๋ฐฉ๋ฒ•, ์‹œ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜์—ฌ ๋™์  ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•จ

ID

1๏ธโƒฃย Explicit identity: ๋ช…์‹œ์  ID

2๏ธโƒฃย Structual identity: ๊ตฌ์กฐ์  ID

<aside> ๐ŸŒŸ Every view has an identity โ†’ ๋ช…์‹œ์  ์‹๋ณ„์ž๊ฐ€ ์—†์–ด๋„ ๋ชจ๋“  ๋ทฐ๋Š” ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง โ†’ SwiftUI๋Š” ๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ์— ๋Œ€ํ•œ ์•”์‹œ์  ID๋ฅผ ์ƒ์„ฑํ•จ

</aside>

AnyView

func view(for dog: Dog) -> some View {
		var dogView: AnyView
		
		if dog.breed == .bulldog {
				dogView = AnyView(BulldogView())
		} else if dog.breed == .pomeranian {
				dogView = AnyView(PomeranianView())
		} else if dog.breed = .borderCollie {
				dogView = AnyView(BorderCollieView())
				
				if sheepNearby {
						dogView = AnyView(HStack {
								dogView
								SheepView()
						})
				}
		} else {
				dogView = AnyView(UnknownBreedView())
		}
		return dogView
}

๐Ÿ”ฅ ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ ๊ฐ’์ด AnyView๊ฐ€ ๋˜์–ด ํƒ€์ž…์ด ์ง€์›Œ์ง€๊ฒŒ ๋จ

@ViewBuilder
func view(for dog: Dog) -> some View {
		var dogView: AnyView
		
		if dog.breed == .bulldog {
				BulldogView()
		} else if dog.breed == .pomeranian {
				PomeranianView()
		} else if dog.breed = .borderCollie {
				HStack {
						BorderCollieView()
						if sheepNearby {
								SheepView()
						}
				}
		} else {
				UnknownBreedView()
		}
}

โš’๏ธย function์„ ViewBuilder๋กœ ์ถ”๋ก ํ•˜์ง€ ์•Š์ง€๋งŒ, ViewBuilder ์†์„ฑ์„ ์ง์ ‘ ์ ์šฉํ•˜์—ฌ View ํ”„๋กœํ† ์ฝœ์ด ์•”์‹œ์ ์œผ๋กœ body ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ๊ฑฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-05-07 แ„‹แ…ฉแ„’แ…ฎ 6.28.39.png

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-05-07 แ„‹แ…ฉแ„’แ…ฎ 6.29.28.png