Skip to content

Instantly share code, notes, and snippets.

View karigrooms's full-sized avatar

Kari Grooms karigrooms

View GitHub Profile
@karigrooms
karigrooms / swiftui-buttons-viewmodel-unit-tests.swift
Last active February 19, 2021 17:06
SwiftUI unit tests examples for Lessons in SwiftUI blog post
class ButtonViewModelTests: XCTestCase {
// ...
func testDefaultConfig() {
let vm = ButtonViewModel(iconMode: nil, inverse: false, size: .medium, type: .secondary)
let size = ButtonSize.medium
let type = ButtonType.secondary
XCTAssertNil(vm.iconStyle)
XCTAssertEqual(vm.selectedStyle, type.selectedStyle)
@karigrooms
karigrooms / swiftui-buttons-viewmodel-example-3.swift
Last active February 19, 2021 17:04
SwiftUI button ViewModel example for Lessons in SwiftUI blog post (3rd example)
struct VrboButtonStyle: ButtonStyle {
let iconMode: UTButtonIconMode?
let inverse: Bool
let size: UTButtonSize
let type: UTButtonType
func makeBody(configuration: Configuration) -> some View {
ButtonStyleView(configuration: configuration,
type: type,
@karigrooms
karigrooms / swiftui-buttons-viewmodel-example-2.swift
Last active February 18, 2021 18:09
SwiftUI button viewmodel example for Lessons in SwiftUI blog post (2nd example)
struct ButtonViewModel {
// ...
// MARK: State Styles
func backgroundColor(for isEnabled: Bool, isPressed: Bool) -> Color {
let styles = buttonTypeStyle(for: isEnabled, isPressed: isPressed)
return styles.backgroundColor.color.opacity(styles.buttonOpacity)
}
@karigrooms
karigrooms / swiftui-buttons-viewmodel-example.swift
Created February 18, 2021 17:52
SwiftUI button viewmodel example for Lessons in SwiftUI blog post (first example)
struct ButtonViewModel {
// ...
// MARK: Style
var disabledStyle: ButtonType.Style {
return inverse ? type.disabledInverseStyle : type.disabledStyle
}
var selectedStyle: ButtonType.Style {
@karigrooms
karigrooms / swiftui-composition-order-4.swift
Created February 17, 2021 22:14
SwiftUI composition order of view modifiers for Lessons in SwiftUI blog post (4th example)
import SwiftUI
struct ExampleView: View {
var body: some View {
VStack(alignment: .center, spacing: 16) {
Text("One")
Text("Two")
Text("Three (override parent modifier)").font(.headline)
Text("Four")
}
@karigrooms
karigrooms / swiftui-composition-order-3.swift
Created February 17, 2021 22:04
SwiftUI composition order of view modifiers for Lessons in SwiftUI blog post (third example)
import SwiftUI
struct ExampleView: View {
var body: some View {
Text("Hello world!")
.foregroundColor(.blue)
.foregroundColor(.black)
}
}
@karigrooms
karigrooms / swiftui-composition-order-2.swift
Last active February 19, 2021 18:19
SwiftUI composition order of view modifiers for Lessons in SwiftUI blog post (second example)
import SwiftUI
struct MyButtonStyle: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
.fixedSize()
// apply size modifiers
.frame(width: nil, height: 48)
@karigrooms
karigrooms / swiftui-composition-order-1.swift
Last active February 19, 2021 18:19
SwiftUI composition order of view modifiers for Lessons in SwiftUI blog post (first example)
import SwiftUI
struct MyButtonStyle: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
.fixedSize()
// apply background color BEFORE size modifiers
.background(Color.blue)
@karigrooms
karigrooms / swiftui-uiviewrepresentable.swift
Last active February 19, 2021 17:09
SwiftUI UIViewRepresentable example for Lessons in SwiftUI blog post
import SwiftUI
// UIView wrapped with SwiftUI
struct UserAvatars: UIViewRepresentable {
let users: [UserProfile]
func makeUIView(context: Context) -> UserAvatarsUIView {
return UserAvatarsUIView()
}
@karigrooms
karigrooms / swiftui-uihostingcontroller-example.swift
Created February 17, 2021 20:50
SwiftUI UIHostingController example for Lessons in SwiftUI blog post
import SwiftUI
import UIKit
class MyViewController: UIViewController {
// this is how you embed a SwiftUI View
lazy var host: UIViewController = {
return UIHostingController(rootView: MySwiftUIView())
}()