Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

14 Commits

Folders and files

Repository files navigation

FoundationExtensions

CI Status Version License Platform

Description

This repository contains useful extensions on Foundation, UIKit and SwiftUI

Usage

Chain

Combination of @dynamicMemberLookup with KeyPathes and callAsFunction

let label = UILabel()~
  .text("Text")
  .textColor(.red)
  .font(.system(24))
  .apply()

Dates

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

Builders

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

Installation

  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/HyperfocusDisordered/FoundationExtensions.git", from: "1.2.0")
  ],
  targets: [
    .target(name: "SomeProject", dependencies: ["FoundationExtensions"])
  ]
)
$ swift build

Author

ovchar.denis.self@gmail.com

License

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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages