Skip to content

Instantly share code, notes, and snippets.

@vanvoorden
Created November 14, 2023 01:33
Show Gist options
  • Save vanvoorden/1c7c6ed08898de7f4b8619147537c0eb to your computer and use it in GitHub Desktop.
Save vanvoorden/1c7c6ed08898de7f4b8619147537c0eb to your computer and use it in GitHub Desktop.
RandomAccessCollection Performance Problems when List is paired with NavigationStack
//
// NavigationDemoApp.swift
// NavigationDemo
//
// Created by Rick Van Voorden on 11/7/23.
//
import Collections
import SwiftUI
let NavigationDemoRange = 0...999999
extension Int: Identifiable {
public var id: Self {
return self
}
}
@main struct NavigationDemoApp: App {
// let array = Array(NavigationDemoRange)
let dictionary = OrderedDictionary(
uniqueKeys: NavigationDemoRange,
values: NavigationDemoRange
)
// let set = OrderedSet(NavigationDemoRange)
}
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationView {
// List(
// NavigationDemoRange,
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationView {
// List(
// self.array,
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationView {
// List(
// self.array[NavigationDemoRange],
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// static OrderedDictionary.Values<>.== infix(_:_:)
// hit count = 1
// hit count = 1
// hit count = 1
// FAST
extension NavigationDemoApp {
var body: some Scene {
WindowGroup {
NavigationView {
List(
self.dictionary.values,
rowContent: { element in
NavigationLink(
String(element)
) {
Text(
String(element)
)
}
}
)
}
}
}
}
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationView {
// List(
// self.dictionary.values.elements,
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// static OrderedSet.== infix(_:_:)
// hit count = 1
// hit count = 1
// hit count = 1
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationView {
// List(
// self.set,
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationView {
// List(
// self.set.elements,
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationStack {
// List(
// NavigationDemoRange,
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationStack {
// List(
// self.array,
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationStack {
// List(
// self.array[NavigationDemoRange],
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// static OrderedDictionary.Values<>.== infix(_:_:)
// hit count = 1
// hit count = 25
// hit count = 37
// SLOW PUSH
// SLOW POP
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationStack {
// List(
// self.dictionary.values,
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationStack {
// List(
// self.dictionary.values.elements,
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// static OrderedSet.== infix(_:_:)
// hit count = 1
// hit count = 25
// hit count = 37
// SLOW PUSH
// SLOW POP
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationStack {
// List(
// self.set,
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationStack {
// List(
// self.set.elements,
// rowContent: { element in
// NavigationLink(
// String(element)
// ) {
// Text(
// String(element)
// )
// }
// }
// )
// }
// }
// }
//}
// static OrderedDictionary.Values<>.== infix(_:_:)
// hit count = 7
// hit count = 12
// hit count = 17
// SLOW PUSH
// FAST POP
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationStack {
// List(
// self.dictionary.values,
// rowContent: { element in
// NavigationLink(
// String(element),
// value: element
// )
// }
// ).navigationDestination(
// for: Int.self,
// destination: { element in
// Text(
// String(element)
// )
// }
// )
// }
// }
// }
//}
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationStack {
// List(
// self.dictionary.values.elements,
// rowContent: { element in
// NavigationLink(
// String(element),
// value: element
// )
// }
// ).navigationDestination(
// for: Int.self,
// destination: { element in
// Text(
// String(element)
// )
// }
// )
// }
// }
// }
//}
// static OrderedSet.== infix(_:_:)
// hit count = 7
// hit count = 12
// hit count = 17
// SLOW PUSH
// FAST POP
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationStack {
// List(
// self.set,
// rowContent: { element in
// NavigationLink(
// String(element),
// value: element
// )
// }
// ).navigationDestination(
// for: Int.self,
// destination: { element in
// Text(
// String(element)
// )
// }
// )
// }
// }
// }
//}
// FAST
//extension NavigationDemoApp {
// var body: some Scene {
// WindowGroup {
// NavigationStack {
// List(
// self.set.elements,
// rowContent: { element in
// NavigationLink(
// String(element),
// value: element
// )
// }
// ).navigationDestination(
// for: Int.self,
// destination: { element in
// Text(
// String(element)
// )
// }
// )
// }
// }
// }
//}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment