Skip to content

Instantly share code, notes, and snippets.

Hacking in Swift

Adrian M. DevAndArtist

Hacking in Swift
View GitHub Profile
View swiftui_bugged_preferences.swift
struct PKey: PreferenceKey {
static var defaultValue: Int?
static func reduce(value: inout Int?, nextValue: () -> Int?) {
print(#function, "value:", value as Any, "nextValue:", nextValue() as Any)
value = nextValue()
struct ContentView: View {
let condition = true
View swiftui_non_rendering_view_with_preferences.swift
// BUG: FB7569572
struct GeometrySizeKey: PreferenceKey {
static func reduce(value: inout CGSize?, nextValue: () -> CGSize?) {
value = nextValue()
extension View {
func readGeometrySize() -> some View {
View swiftui_state_tests.swift
import SwiftUI
class Base: CustomDebugStringConvertible {
var debugDescription: String {
"\(type(of: self)) \(ObjectIdentifier(self))"
init() {
print("🟢 init\t", self)
View swiftui_helper_property_wrapper.swift
import Combine
import SwiftUI
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public struct Model<Value>: DynamicProperty {
final class _Box: ObservableObject {
let objectWillChange = ObservableObjectPublisher()
var value: Value {
View NavigationView_Issue.swift
import SwiftUI
struct ContentView: View {
@State var flag = true
var body: some View {
let text = "\(flag ? "HStack" : "ZStack")"
return VStack {
Button("change the stack") {
DevAndArtist / fake_animation_completion.swift
Created Sep 18, 2019
SwiftUI Fake Animation completion for animations that do not overshoot the final value
View fake_animation_completion.swift
fileprivate struct _CompletionPreferenceKey: PreferenceKey {
typealias Value = CGFloat
static let defaultValue: CGFloat = 0
static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
value = nextValue()
DevAndArtist / reimplemented_parts_of_swiftui.swift
Last active Jan 1, 2021
This is a custom implementation of some parts of SwiftUI which I could observe.
View reimplemented_parts_of_swiftui.swift
import CoreGraphics
final class TransactionStack {
static let shared = TransactionStack()
private var _transactions: [Transaction]
private init() {
dispatchPrecondition(condition: .onQueue(.main))
_transactions = []
DevAndArtist / swiftui_to_uikit.swift
Last active Jul 8, 2019
Applying SwiftUI ideas to UIKit
View swiftui_to_uikit.swift
import RxSwift
import RxCocoa
import RxRelay
extension Disposable {
public func wrapIntoAnyDisposable() -> AnyDisposable {
return AnyDisposable(self)
View WWDC 2019 Labs

WWDC 2019 Labs Questions

Size changes propagation to child view controller

In A Look Inside Presentation Controllers - WWDC 2014 session the following pattern was introduced.

  • A child view controller or a presented view controller can issue a request for size update by setting its preferredContentSize property.
  • A parent view controller or a presentation controller will receive a callback on preferredContentSizeDidChangeForChildContentContainer method.
  • At this point the receiver can decide if can allow the size request and layout the child view controller or the presented view controller.
View Property