SwiftUIλ₯Ό μ¬μ©νλ€λ³΄λ©΄ some ViewλΌλ λ°ν νμ μ λ§μ΄ 보κ²λλ€. bodyμ λ°ν νμ λ κ·Έλ κ³ λ·°λ₯Ό λΆλ¦¬ν΄μ λ°λ‘ λ³μλ‘ λ§λ€ λλ νμ μ some Viewλ₯Ό μ¬μ©ν΄μ λ°ννκ² λλ€.
λλ κ·Έ λμ someμ΄ νΈμΆ μμ μ νμ μ΄ νμ λμ΄ κ³ μ λ νμ μΌλ‘ μ¬μ©ν μ μκ² ν΄μ£Όλ ν€μλλΌκ³ μκ°νλ€. κ·Έλ¬λ€κ° νλμ ν¨μμμ λΆκΈ° μ²λ¦¬μ λ°λΌ μ¬λ¬ μ’ λ₯μ λ·° νμ μ 리ν΄ν μ μλ ν¨μλ₯Ό λ§λ€ λ λ¨μν some Viewλ‘ λ°νν΄μ£Όλ©΄ λ¦¬ν΄ νμ μμ λ¬Έμ κ° μμ κ±°λΌκ³ μκ°νλ€. ν΄λΉ μ½λλ μλμ κ°λ€.
private func destinationView(type: ViewType) -> some View {
switch type {
case ViewType.original:
AsyncImageView(imageViewModel: imageViewModel)
case ViewType.first:
ImageScrollView(imageViewModel: imageViewModel)
case ViewType.second:
ResizedImageView(imageViewModel: imageViewModel)
case ViewType.third:
ResizeInBgView(imageViewModel: imageViewModel)
case ViewType.fourth:
ThumbnailView(imageViewModel: imageViewModel)
}
}
νμ§λ§ μμ κ°μ΄ μμ±νλ©΄ λ¦¬ν΄ νμ μ νμ ν μ μλ€λ μ»΄νμΌ μλ¬κ° λ°μνλ€. λλ κ·Έ λμ someμ κ³ μ νμ μ΄ νΈμΆ μμ μμ νμ λλ€κ³ μκ°νκΈ°μ μ€λ₯κ° λλ μμΈμ μ μ μμλ€. μκ³ λ³΄λ someμ νμ μ μ»΄νμΌ κ³Όμ μμ νμ μ΄ λλ€κ³ νλ€. κ·Έλμ μμ κ°μ κ²½μ°μλ μ»΄νμΌ κ³Όμ μμ κ³ μ νμ μ μ μ μκΈ° λλ¬Έμ μ€λ₯κ° λλ κ²μ΄λ€.
(μμ κ²½μ°μλ @ViewBuilder
λ₯Ό λΆμ¬μ£Όλ κ²μΌλ‘ ν΄κ²°ν μ μλ€.)
λ¬Έμ λ₯Ό ν΄κ²°νκ³ λ³΄λ λͺ κ°μ§ μλ¬Έμ μ΄ μκ²Όλ€.
κ·Έλμ ν΄λΉ κΆκΈμ¦μ ν΄κ²°νκΈ° μν΄ WWDC22 μμκ³Ό λ€λ₯Έ λΈλ‘κ·Έ κΈλ€μ 보면μ 곡λΆν΄λ΄€λ€.
someκ³Ό anyλ ****μ λλ¦κ³Ό νλ‘ν μ½μ μ¬μ©νλ€λ³΄λ©΄ μμ£Ό 보κ²λλ μΉκ΅¬λ€μ΄λ€. λ λ€ μΆμνλ νμ μ μ¬μ©ν λ μ μ©νλ ν€μλλ€μ΄λ€.
κ°λ¨νκ² νννμλ©΄ someμ μ»΄νμΌ κ³Όμ μμ λ¨μΌ κ³ μ νμ μ μꡬνκ³ anyλ λͺ¨λ νμ μ μμ©ν μ μλ μΆμνλ νμμ΄λ€. someμ νμ μ μ νμν€λ λλμ΄κ³ anyλ λ°λλ‘ μΆμνμμΌμ μ¬μ©ν μ μλ λλμ΄λ€. μλμ μμλ‘ κ°λ¨νκ² νμΈν΄λ³΄μ
protocol Shape {
var angleCount: Int { get }
}
struct CircleShape: Shape {
var angleCount: Int = 0
}
struct TriangleShape: Shape {
var angleCount: Int = 3
}
struct RectangleShape: Shape {
var angleCount: Int = 4
}
//anyShapesλ μ€λ₯κ° λμ§ μμ§λ§ someShapeλ μ»΄νμΌ μλ¬κ° λ°μνλ€.
var anyShapes: [any Shape] = [CircleShape(), TriangleShape(), RectangleShape()]
var someShapes: [some Shape] = [CircleShape(), TriangleShape(), RectangleShape()]
μμ μ½λλ μ, μΌκ°ν, μ¬κ°νμ Shape
λΌλ νλ‘ν μ½μ μ΄μ©ν΄ μΆμννκ³ μ΄λ₯Ό λ κ°μ λ°°μ΄μ λ΄κ³ μλ€. νλλ any Shape
λ₯Ό λ°κ³ νλλ some Shape
λ₯Ό λ°λλ€. λ€μκ³Ό κ°μ μν©μμ anyλ μ μμ μΌλ‘ λμνμ§λ§ someμ κ²½μ° μ»΄νμΌ μλ¬κ° λ°μνλ€. μ΄λ some Shape
κ° νλμ λ¨μΌ νμ
μ μΆλ‘ ν΄μΌ νλλ° Shapeλ₯Ό μ±ννλ μ¬λ¬ νμ
λ€μ΄ λ°°μ΄μ μμ΄ λ¨μΌ νμ
μ μΆλ‘ νμ§ λͺ»ν΄ μκΈ°λ μλ¬μ΄λ€.
μΆκ°μ μΌλ‘ WWDC22μ λμλ μμλ₯Ό 보λλ‘ νμ