Skip to content

Difference between some View vs any View ​

May 25, 2025

let’s dive into some View vs any View in SwiftUI. Understanding the difference is key to mastering SwiftUI's type system and performance characteristics.

some View — Opaque Return Type ​

Meaning:

The function or property returns a specific, single concrete type that conforms to View, but hides its identity.

Example: ​

swift
var body: some View {
    VStack {
        Text("Hello")
        Image(systemName: "star")
    }
}

Characteristics: ​

  • Compile-time known: The compiler knows exactly what the type is, even if you don’t.

  • Single concrete type: You cannot return different types in different branches.

  • Fast and optimized: No type erasure — it's essentially inlined by the compiler.

  • Used for View composition in SwiftUI extensively.

Limitation: ​

swift
var content: some View {
    if condition {
        Text("Hi")
    } else {
        Image(systemName: "star")
    }
}
// Error: return types must be the same (Text ≠ Image)

To fix that, you'd need to wrap them in a common type, which leads us to:

any View — Existential Type with Type Erasure ​

Meaning:

The function or property can return any type that conforms to View, using type erasure to hide its identity.

Example: ​

swift
var content: any View {
    if condition {
        Text("Hi")
    } else {
        Image(systemName: "star")
    }
}

Characteristics: ​

  • Run-time type: The actual type is only known at runtime.

  • Flexible: Can return different types conforming to View.

  • Slower: Because of dynamic dispatch and type erasure.

  • Rare in SwiftUI: Generally avoided unless you must return multiple unrelated View types conditionally.

Note:

any View became available with Swift 5.7 and beyond (included in SwiftUI since iOS 16/macOS 13+). Before that, you had to use AnyView.

A Classic Pre-iOS 16 Workaround — AnyView ​

Before Swift supported any View directly, we did this:

swift
var content: some View {
    if condition {
        AnyView(Text("Hi"))
    } else {
        AnyView(Image(systemName: "star"))
    }
}

This works but has performance costs, and Apple recommends minimizing AnyView usage.

Summary Table ​

Featuresome Viewany View / AnyView
Type Known AtCompile timeRuntime
PerformanceFast (no erasure)Slower (type erasure)
Return TypesMust be one concrete typeCan be multiple types
FlexibilityLessMore
Common in SwiftUI?YesOnly when truly needed

When to Use Which? ​

  • Use some View by default — safer, faster, preferred by SwiftUI.

  • Use any View or AnyView only if you must return different view types from one place.

  • If you find yourself needing any View, consider if your logic can be refactored to return a common layout structure instead.

Released under the MIT License.