Skip to content

bernndr/swift-macros

Repository files navigation

Swift Macros

Contains a collection of useful macros for my personal projects.

Usage

Symbol

let symbol = #symbol("swift") // Macro expands to "swift"

In case the provided value is not a valid SF Symbol, Xcode will show a compile error.

URL

let url = #URL("https://www.swift.org") // Macro expands to URL(string: "https://www.swift.org")!

In case the provided value is not a valid URL, Xcode will show a compile error.

AssociatedValues

Add variables to retrieve the associated values.

@AssociatedValues
enum Barcode {
  case upc(Int, Int, Int, Int)
  case qrCode(String)
}

// Expands to
enum Barcode {
  ...

  var upcValue: (Int, Int, Int, Int)? {
    if case let .upc(v0, v1, v2, v3) = self {
        return (v0, v1, v2, v3)
    }
    return nil
  }

  var qrCodeValue: (String)? {
    if case let .qrCode(v0) = self {
        return v0
    }
    return nil
  }
}

Singleton

Generate singleton code for struct and class

@Singleton
struct UserStore {
}

// Expands to
struct UserStore {
  static let shared = UserStore()

  private init() {
  }
}