Swiftpack.co - dankinsoid/VDKit as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by dankinsoid.
dankinsoid/VDKit 1.190.0
This repository contains useful extensions on Foundation, UIKit and SwiftUI
⭐️ 9
🕓 2 weeks ago
iOS macOS
.package(url: "https://github.com/dankinsoid/VDKit.git", from: "1.190.0")


CI Status Version License Platform


This repository contains useful extensions on Foundation, UIKit and SwiftUI



Combination of @dynamicMemberLookup with KeyPathes and callAsFunction

let label = UILabel()~


Date struct provides very little functionality, any operations with dates must be implemented through Calendar in very unintuitive, complex and difficult to remember ways. To simplify operations with dates, this library provides a simple and intuitive syntax.

Some examples

let afterTomorrow: Date = .today + 2.days
//or .today + .days(2)
//or Date.today.adding(2 * .day)
let difference = date2 - date1
let daysBetweenDates = difference.days
//or date2.interval(of: .day, from: date1)
let weeksBetweenDates = difference.weeks
let hours = Date().component(.hour)
//or Date().hour()
let someDate = Date(year: 1994, month: 10, day: 4) 
let startOfMonth = Date().start(of: .month)
let lastMonth = Date().end(of: .year)
let lastDay = Date().end(of: .year, accuracy: .day)
let nextYear = Date().next(.year)
let nextLeapYear = Date().nearest([.month: 2, .day: 29], in: .future)?.start(of: .year)
let monthLenght = Date().count(of: .day, in: .month)
for month in (date1...date2).each(.month) {...}
let weekdayName = Date().name(of: .weekday)
if let date = Date(from: dateString, format: "dd.MM.yyyy") {...}
let dateString = Date().string("dd.MM.yyyy")
let iso860String = Date().iso860
let defaultDateString = Date().string(date: .long, time: .short)
let relativeDateString = Date().string("dd.MM.yyyy",
                            relative: [
                                .day(1): "Tomorrow",
                                .day(0): "Today, HH:mm",
                                .day(-1): "Yesterday",
                                .week(0): "EEEE",       
                                .year(0): "dd.MM"

Any function contains additional parameters with default values such as:

calendar: Calendar = .default
locale: Locale = .default
timezone: TimeZone = .default

where Calendar.default, Locale.default and TimeZone.default - static variables that you can change. So you can use custom Calendar in each function

let dayOfMonth = Date().position(of: .day, in: .month, calendar: customCalendar)

Or you can set your own default value for all functions

Calendar.default = customCalendar


  • ArrayBuilder<T> - result builder to create arrays
  • ComposeBuilder
  • SingleBuilder


Easy integration UIKit elements to SwiftUI code. This realization uses @autoclosures in order to avoid UIView re-creation. § operator creates UIKitView, UIKitView supports chaining to update UIView. .uiKitViewEnvironment modifier allows to set UIViews properties as environments via chaining.

@State var text: String 
let textColor: Color 

var body: some View {
  VStack {
    UIKitView {
    } update: { label, context in
      label.text = text
  .uiKitViewEnvironment(for: UILabel.self)


SwiftUI like syntaxis for UIKit via function builders and chaining

class YourView: LtView {

  override func layout() -> [SubviewProtocol] {
    UIStackView(.vertical) { 
        .font(.systemFont(ofSize: 20))

      someView { 

      Text("SubviewsBuilder supports SwiftUI views too")

VDLayout is good for use with ConstraintsOperators, just need make Constraints<Item> impelemts SubviewProtocol

UIView { 
    .width(someView.width / 2 + 10)
    .edges(.vertical).equal(to: 10)


view.environments.someValue = 0

extension UIViewEnvironment {
  var someValue: Int {
    get { self[\.someValue] ?? 0 }
    set { self[\.someValue] = newValue }


  1. Swift Package Manager

Create a Package.swift file.

// swift-tools-version:5.0
import PackageDescription

let package = Package(
  name: "SomeProject",
  dependencies: [
    .package(url: "https://github.com/dankinsoid/VDKit.git", from: "1.190.0")
  targets: [
    .target(name: "SomeProject", dependencies: ["VDKit"])
$ swift build


dankinsoid, voidilov@gmail.com


VDAnimation is available under the MIT license. See the LICENSE file for more info.


Stars: 9
Last commit: 2 weeks ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics