Giter Site home page Giter Site logo

flowductive / foundation-plus Goto Github PK

View Code? Open in Web Editor NEW
7.0 0.0 1.0 996 KB

🧱 Swift Foundation tools to make your life a little easier. Includes extensions for Array, String, Date, TimeInterval, Optional, and more.

Swift 100.00%
foundation ios macos swift swift-package swift-package-manager

foundation-plus's Introduction

Social Preview

Basic Swift extensions that make life easier.

đŸĒļ Lightweight, Swift-y looking code for modern SwiftUI developers

🧩 Useful methods and properties written in native Swift


⚠ī¸ Note: This package is still under development and its contents are freely subject to change.

🚧 Wiki under construction. Read below to get started!

GitHub release (latest SemVer) GitHub Release Date GitHub issues GitHub pull requests

What is FoundationPlus?

FoundationPlus is a suite of basic Swift extensions that help speed up the process of app development, and help make your code look nicer. Functions that you'll normally need, like methods to check the app's version, get the current day of week, and so on, can have convoluted code. FoundationPlus simplifies these with built-in extensions.

// 😴 Before
let interval = TimeInterval(9945)

// ✨ After
let interval = 2.hours + 45.minutes + 45.seconds
// 😴 Before
if let value = optionalValue {
  myVar = value
} else {
  myVar = nil
}

// ✨ After
myVar =? optionalValue
// 😴 Before
if array.count >= 5 {
  myVar = array[4]
}

// ✨ After
myVar = array[safe: 4]

Completed Features

  • Extensions
  • Other Features

Most of the above features are cross-platform and are supported on iOS, macOS, tvOS and watchOS.

Get Started

Add FoundationPlus to your project using Swift Package Manager:

https://github.com/Flowductive/foundation-plus

🧩 Extensions

Date and TimeInterval extensions

Get TimeIntervals easily:

let interval = 10.minutes
let interval2 = 4.days

Format TimeIntervals:

print(3.hours.formattedColon) // 3:00
print((2.minutes + 30.seconds).formatted(.short)) // 2m 30s
print(4.hours.formatted(.full)) // 4 hours

Get the current month, day, hour, minute, etc:

let date = Date()
let dateFormatted = "The current time is \(date.hour) : \(date.minute)."

Get a date moved forward to right before midnight:

let thisEvening = date.atMidnight

Get formatted versions of the date:

print(date.shorthand) // 6/7/22
print(date.longhand) // Tuesday, June 07, 2022

Subtract dates and get a TimeInterval:

let timeBetween = laterDate - earlierDate

Get the next/preview occurence of a specific weekday:

let nextTuesday = Date().next(.tuesday)
let lastWednesday = Date().previous(.wednesday, considerToday: false)

Get a string representing how long it's been since the Date:

print(lastWednesday.timeAgoSince()) // 2 days ago

Array extensions

Safely subscript arrays, and even wrap array indices:

let myString = ["a", "b", "c", "d"]
let myString: String = myStrings[safe: 5] ?? "-" // "-"
let myString2: String = myString[wrap: 5] // "b"

Use new operators on arrays:

var array: [1, 2, 3]

// Add the element(s) if it is not inside
array <= 4 // [1, 2, 3, 4]
array <= 2 // [1, 2, 3, 4]
array <= [4, 5] // [1, 2, 3, 4, 5]

// Remove elements
array -= 1 // [2, 3, 4, 5]
array -= [2, 3, 6] // [4, 5]

Use additional methods on arrays:

let array = [1, 2, 3, 3]
// Add to the end if not already in the array
array.appendUniquely(5) // [1, 2, 3, 3, 5]
// Add to the beginning if not already in the array
array.pushUniquely(0) // [0, 1, 2, 3, 3, 5]
// Remove all of an element
array.removeAll(3) // [0, 1, 2, 5]
// Pick a random bunch of elements
array.pick(2) // [0, 2]

Optional extensions

Optionally assign the right-hand side to the left-hand side if non-nil:

var str: String = "Hello World"
var optionalStr: String? = nil
str =? optionalStr // Only sets str if myOptionalString is non-nil
print(str) // "Hello, world"

Optionally check if two Optional or non-Optional values are equal/nonequal, and return false for equality and true for inequality if either value is nil:

let areEqual: Bool { nil ==? 4 } // False
let areNonEqual: Bool { 4 !=? 3 } // True

String extensions

Return only alpha-numeric parts of a String:

let alphanumeric = "Abc123+-=~".alphanumeric // "Abc123"

Return the first word of a String:

let first = "Hello World!".firstWord // "Hello"

Get a random alphanumeric string with a specified length:

let random = String.random(16) // "b7vb92Fg9FEN2g8A"

Repeat a String:

let repeated = "Hi".repeat(5) // "HiHiHiHiHi"

Check if a String is a valid email:

let isEmailValid: Bool = "[email protected]".isValidEmail() // True

✨ Other Features

Get URL action

Quickly open a URL in iOS or macOS:

myUrl.open()

Get part of day and weekday

Grab information regarding the time of day:

let part = DayPart.get(from: Date()) // Chooses automatically from .morning, .midday, .afternoon, .evening, .night, and .midnight
print(part.greeting) // "Good morning!"

foundation-plus's People

Contributors

benlmyers avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Forkers

novolei

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤ī¸ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.