Avatar
ORT 使ったら existential や type erasure を使わずに heterogeneous なコレクションを実現できそうな気がしてるんだけどどうでしょう(↓みたいな感じで)?ただし、現状ではループして取り出す方法がないし、これをうまく扱うには道具が足りてなさそう。 import SwiftUI protocol ViewSequence { associatedtype Element: View associatedtype Next: ViewSequence var element: Element { get } var next: Next { get } } extension Never: ViewSequence { var element: Never { fatalError() } var next: Never { fatalError() } } struct ViewSequenceNode<Element: View, Next: ViewSequence>: ViewSequence { let element: Element var next: Next { if let next = _next { return next } else { fatalError() } } fileprivate let _next: Next? init(element: Element, next: Next) { self.element = element self._next = next } } extension ViewSequenceNode where Next == Never { init(element: Element) { self.element = element self._next = nil } } func foo() -> some ViewSequence { return ViewSequenceNode( element: Text("Hello"), next: ViewSequenceNode( element: HStack { Text("World") }, next: ViewSequenceNode( element: VStack { Text("!") } ) ) ) } let views = foo() print(views.element) print(views.next.element) print(views.next.next.element)