Swift Package Index


Some usefull Foundation and UIKit Extensions.


  • The latest stable release is 1.6.6. Released 2 months ago.
  • The last commit to master was 2 months ago.

Swift Version Compatibility

  • 1.6.6 and master
    5.3
    5.2
    5.1
    5.0
    4.2
Full build results

Platform Compatibility

  • 1.6.6 and master
    iOS
    macOS(Intel)
    macOS(ARM)
    Linux
    tvOS
    watchOS
Full build results

FHExtensions

Some usefull Foundation and UIKit Extensions.

Will be expanded over time.

Requirements

  • macOS 10.10+
  • iOS 9.0+
  • tvOS 9.0+

Installation

Swift Package Manager

Add the following to the dependencies of your Package.swift:

.package(url: "https://github.com/FelixHerrmann/FHExtensions.git", from: "x.x.x")

Manual

Download the files in the Sources folder and drag them into you project.

Usage

Array

subscript(safe index: Index) -> Element?

This subscript checks, if the index is in range.

Getting array values works like that:

let array = [0, 1, 2]

print(array[1]) // 1
print(array[safe: 1]) // Optional(1)

print(array[3]) // Fatal error: Index out of range
print(array[safe: 3]) // nil

Setting array values works also safely:

var array = [0, 1, 2]

array[safe: 2] = 3
print(array) // [0, 1, 3]

array[safe: 3] = 4
print(array) // [0, 1, 3]

Bundle

versionNumber, buildNumber

The values for the CFBundleShortVersionString and CFBundleVersion key in the info dictionary.

CGRect

Coordinates: x, y, top, bottom, left, right, midX, midY, center

Convenience properties for CGRect coordinates.

These properties also contains setters which will recreate the frame entirely.

Date

init?(_:_:_:hour:minute:second)

This initializer can create a Date object by date components. It can fail if a date could not be found which matches the components.

let date = Date(23, 2, 1999)
let dateWithTime = Date(23, 2, 1999, hour: 9, minute: 41, second: 0)

The time values are optional.

JSONDecoder

DateDecodingStrategy.iso8601withFractionalSeconds

An ISO 8601 DateDecodingStrategy with fractional seconds. Something like 1999-02-23T08:41:00.000Z will work with the decoder.

JSONEncoder

DateEncodingStrategy.iso8601withFractionalSeconds

An ISO 8601 DateEncodingStrategy with fractional seconds. Something like 1999-02-23T08:41:00.000Z will be the output from the encoder.

String

capitalizedFirst

A copy of the string where the first letter is capitalized.

UIColor

RGB: red, green, blue, alpha

These properties are based on the getRed(_:green:blue:alpha) method.

init?(hex:)

This initializer can create a UIColor object by a hex string. It can fail if the string has not the correct format. It allows hex strings with and without alpha, the hash symbol is not required and capitalization does not matter.

let yellow: UIColor? = UIColor(hex: "#ffff00ff")

createHex(alpha:hashSymbol:)

This method creates a hex string from the color instance.

let yellow = UIColor(red: 1, green: 1, blue: 0, alpha: 1)
let hexString: String = yellow.createHex(alpha: true)
print(hexString) // "#ffff00ff"

UIDevice

modelIdentifier

With UIDevice.current.modelIdentifier you are able to get the model identifier of the current device as String.

This works also on Mac (Catalyst).

UIDirectionalPanGestureRecognizer

A concrete subclass of UIPanGestureRecognizer that looks for panning (dragging) gestures in the setted direction.

let directionalPanRecognizer = UIDirectionalPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))
directionalPanRecognizer.direction = .vertical
view.addGestureRecognizer(directionalPanRecognizer)

UserDefault

A property wrapper which stores the wrapped value in the UserDefaults.

@UserDefault("test", defaultValue: "") var test: String

The wrapped value must be of type UserDefaultType. For every other type use the CodableUserDefault wrapper.

OptionalUserDefault

The UserDefault property wrapper but for optional types.

@OptionalUserDefault("test") var test: String?

CodableUserDefault

This property wrapper works exactly like the UserDefault one but accepts any type that conforms to the Codable protocol.

struct TestType: Codable {
    let name: String
}

@CodableUserDefault("test", defaultValue: TestType(name: "") var test: TestType

License

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