Skip to content

Instantly share code, notes, and snippets.

View ralfebert's full-sized avatar

Ralf Ebert ralfebert

View GitHub Profile
// based on https://sarunw.com/posts/how-to-sort-by-multiple-properties-in-swift/
struct BlogPost {
let title: String
let pageView: Int
let sessionDuration: Double
}
extension BlogPost {
static var examples: [BlogPost] = [
struct Format {
/// 12.03.2021
static let mediumDate: DateFormatter = {
let formatter = DateFormatter()
formatter.dateStyle = .medium
return formatter
}()
/// 12.03.2021 12:34

FB9165511: Swift compiler accepts an invalid circular reference in some conditions

The following code example doesn't compile because of the circular reference. Except if you uncomment the line that uses the weak self. It's still an invalid circular reference, but all of a sudden the compiler accepts it. Happens with Xcode 12.5 and 13 Beta 1.

class Flupp {
    init() {
        print("Flupp!")
    }
 deinit {
import Foundation
import SwiftUI
struct IndexedCollection<Base: RandomAccessCollection>: RandomAccessCollection {
typealias Index = Base.Index
typealias Element = (index: Index, element: Base.Element)
let base: Base
var startIndex: Index { self.base.startIndex }
var endIndex: Index { self.base.endIndex }
func index(after i: Index) -> Index {
import Foundation
import CoreData
extension NSPersistentContainer {
typealias ErrorHandler = (NSError) -> Void
convenience init(defaultContainerWithName name : String, inMemory : Bool = false, errorHandler : ErrorHandler? = nil) {
self.init(name: name)
{
"images" : [
{
"filename" : "icon_20pt@2x.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "icon_20pt@3x.png",
import SwiftUI
import BottomSheet
struct ContentView: View {
@State private var bottomSheetPresented = true
var body: some View {
Color.yellow
.ignoresSafeArea()
.bottomSheet(isPresented: $bottomSheetPresented) {
@ralfebert
ralfebert / CurrentLocation.swift
Last active April 3, 2022 09:57
CurrentLocation provides the current GPS location via CLLocationManager as ObservableObject
import CoreLocation
import os
/// CurrentLocation provides the current GPS location via CLLocationManager as ObservableObject.
///
/// - Meant to be used for 'when the app is in use', NSLocationWhenInUseUsageDescription needs to be
/// set in Info.plist.
///
/// - This can be used by multiple observers but there should be a single manager object for the "isActive" property.
/// If multiple components want to manage isActive, maybe consider creating multiple instances (often
import MapKit
extension CLLocationCoordinate2D {
/// Returns the distance between two coordinates in meters.
func distance(to: CLLocationCoordinate2D) -> CLLocationDistance {
MKMapPoint(self).distance(to: MKMapPoint(to))
}
}

FB9624610: Formatting Swift code using an external tool like swiftformat on Save

I am using the splendid command-line tool swiftformat (https://github.com/nicklockwood/SwiftFormat) to format my Swift code.

For my, the perfect integration point for this tool would be on Save in Xcode. In that way the formatting would not interrupt my editing, but I can see/check the changes done by the formatter, but never forget to format a file after editing.

I'd like to suggest a configuration option for Xcode that allows to configure it in such a way that, when I press save (cmd S) it saves the file and then runs a command line utility and reloads the file - or a capability for an Xcode source code editor extension to do such an operation.

One alternative could be to do it at build time which is possible to configure currently using a Build phase (https://github.com/nicklockwood/SwiftFormat#xcode-build-phase), but unfortunately, with this setup one loses all the undo history in Xcode.