Skip to content

Instantly share code, notes, and snippets.

Keybase proof

I hereby claim:

  • I am sunshinejr on github.
  • I am sunshinejr (https://keybase.io/sunshinejr) on keybase.
  • I have a public key ASC_9nKhKZwMWK4Ciutsh00FNk74FjRLf90QhujodtkmkQo

To claim this, I am signing this object:

//: #typealias & associatedtype magic
//: ##Let's make a protocol without typealias (now associatedtype)
protocol Testable {
}
//: ##And another one with typealias
//: You could think, that the below typealias is just making
//: a typealiast for Int. In fact, we actually created a
@sunshinejr
sunshinejr / Navigation.swift
Created February 26, 2020 10:57
SwiftUI Navigation stack
struct NavigationStack: View {
@ObservedObject var viewModel: NavigationStackViewModel
var body: some View {
viewModel.currentBody?
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .center)
}
}
@sunshinejr
sunshinejr / Defaults.swift
Last active September 13, 2020 15:30
Using NSUserDefaults in Swift 4.
import Foundation
public let Defaults = UserDefaults.standard
open class DefaultsKeys {
fileprivate init() {}
}
open class DefaultsKey<ValueType>: DefaultsKeys {
public let _key: String
@sunshinejr
sunshinejr / Debounced.swift
Last active September 20, 2021 09:47
Swift Property wrapper for debouncing values
@propertyWrapper
public final class Debounced<T: Hashable>: BindingConvertible {
public let delay: Double
private var _value: T
private var timer: Timer? = nil
public var wrappedValue: T {
get {
return _value
@sunshinejr
sunshinejr / ClosureBarButtonItem.swift
Last active November 24, 2021 09:14
Setup for back/dismiss buttons in VCs, useful for MVVM+C pattern to finish coordinators or don't care about navigation controller and it's dismiss button (whether it's a back button or dismiss or w/e).
final class ClosureBarButtonItem: UIBarButtonItem {
private var customAction: (() -> Void)?
convenience init(barButtonSystemItem: UIBarButtonItem.SystemItem, action: (() -> Void)?) {
self.init(barButtonSystemItem: barButtonSystemItem, target: nil, action: nil)
self.target = self
self.action = #selector(didTap)
self.customAction = action
}
@sunshinejr
sunshinejr / AttributedString.swift
Last active November 24, 2022 16:14
Different approach to Attributed Strings in Swift.
import Foundation
import class UIKit.UIImage
struct AttributedString: ExpressibleByStringInterpolation {
enum Attribute: Hashable {
enum ImportanceLevel: String, Equatable {
case very
case enough
}
case important(ImportanceLevel = .enough)