Skip to content

Instantly share code, notes, and snippets.

View Dimillian's full-sized avatar
📱
SwiftUI EVERYWHERE

Thomas Ricouard Dimillian

📱
SwiftUI EVERYWHERE
View GitHub Profile
import SwiftUI
import Combine
struct ContentView: View {
@State var items: [Int] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var body: some View {
List {
ForEach(items, id: \.self) { item in
Text("Item: \(item)")
@Dimillian
Dimillian / NavigationSplitViewExample.swift
Created June 10, 2022 08:27
An example on how to use the new NavigationSplitView on iPad with global navigation
import SwiftUI
enum HomeDestination: String, CaseIterable, Hashable {
case hot, best, trending, new, top, rising
}
enum SubredditDestination: String, CaseIterable, Hashable {
case news, diablo, pics, wtf, games, movies
}
enum UserDestination: String, CaseIterable, Hashable {
//
// ContentView.swift
// HonkHonk
//
// Created by Thomas Ricouard on 23/12/2020.
//
import SwiftUI
public class MusicPlayerManager: ObservableObject {
public static let shared = MusicPlayerManager()
public enum PlayMode {
case random, ordered
}
@Published public var songs: [String: Song] = [:] {
@Published public var currentSong: Song? {
didSet {
private var paymentButtons: some View {
VStack {
HStack(spacing: 0) {
sub.map{ sub in
makeBorderedButton(action: {
self.buttonAction(purchase: sub)
}, label: self.subscriptionManager.subscriptionStatus == .subscribed ?
"Thanks!" :
"\(formattedPrice(for: sub)) Monthly")
.opacity(subscriptionManager.inPaymentProgress ? 0.5 : 1.0)
import Purchases
struct SubscribeView: View {
enum Source: String {
case dashboard, turnip, turnipForm, list, musics
}
@EnvironmentObject private var subscriptionManager: SubscriptionManager
@Environment(\.presentationMode) private var presentationMode
import Foundation
import SwiftUI
import Purchases
public class SubscriptionManager: ObservableObject {
public static let shared = SubscriptionManager()
public enum SubscriptionStatus {
case subscribed, notSubscribed
}
struct ItemsListView: View {
@ObservedObject var viewModel: ItemsViewModel
@State private var showSortSheet = false
@State private var itemRowsDisplayMode: ItemRowView.DisplayMode = .large
var currentItems: [Item] {
get {
if !viewModel.searchText.isEmpty {
return viewModel.searchItems
} else if viewModel.sort != nil {
private var sortSheet: ActionSheet {
var buttons: [ActionSheet.Button] = []
for sort in ItemsViewModel.Sort.allCases {
buttons.append(.default(Text(sort.rawValue.localizedCapitalized),
action: {
self.viewModel.sort = sort
}))
}
if viewModel.sort != nil {
struct ItemsListView: View {
private var sortButton: some View {
Button(action: {
self.showSortSheet.toggle()
}) {
Image(systemName: viewModel.sort == nil ? "arrow.up.arrow.down.circle" : "arrow.up.arrow.down.circle.fill")
.imageScale(.large)
}
}