Appliable

1.0.2

Appliable makes configuring objects easier and more convenient using closures.
pawello2222/Appliable

What's New

1.0.2

2023-07-24T20:53:55Z

Appliable logo

Build Code coverage Language Supported platforms

Swift Package Manager Release version License

Appliable

Appliable makes configuring objects easier and more convenient using closures.

Table of Contents
  1. Highlights
  2. Installation
  3. Examples
  4. Conformance
  5. License

Highlights

let button = UIButton().apply {
    $0.isUserInteractionEnabled = false
}
UserDefaults.standard.apply {
    $0.set("Value 1", forKey: "Key 1")
    $0.set("Value 2", forKey: "Key 2")
    $0.set("Value 3", forKey: "Key 3")
}

Installation

Requirements

  • iOS 15.0+
  • macOS 12.0+
  • watchOS 8.0+
  • tvOS 15.0+

Swift Package Manager

Appliable is available as a Swift Package.

.package(url: "https://github.com/pawello2222/Appliable.git", .upToNextMajor(from: "1.0.0"))

Examples

Classes

let button = UIButton().apply {
    $0.isUserInteractionEnabled = false
}
let label = UILabel()

label.apply {
    $0.isUserInteractionEnabled = false
}

Structs

let calendar = Calendar(identifier: .gregorian).applying {
    $0.timeZone = .init(identifier: "UTC")!
    $0.locale = .init(identifier: "en_US_POSIX")
}
var calendar = Calendar(identifier: .gregorian)

calendar.apply {
    $0.timeZone = .init(identifier: "UTC")!
    $0.locale = .init(identifier: "en_US_POSIX")
}

Block operations

UserDefaults.standard.apply {
    $0.set("Value 1", forKey: "Key 1")
    $0.set("Value 2", forKey: "Key 2")
    $0.set("Value 3", forKey: "Key 3")
}

Arrays

var array = Array(repeating: Date(), count: 3)

array.applyEach {
    $0.addTimeInterval(1000)
}
let array1 = Array(repeating: Date(), count: 3)

let array2 = array1.applyingEach {
    $0.addTimeInterval(1000)
}
let label = UILabel()
let button = UIButton()

[label, button].applyEach {
    $0.isUserInteractionEnabled = false
}

let components = [UILabel(), UIButton()].applyEach {
    $0.isUserInteractionEnabled = false
}

Conformance

Built-in conformance

  1. Value types
  • Array
  • Calendar
  • Date
  • Dictionary
  • Set
  • URL
  1. Reference types
  • JSONDecoder
  • JSONEncoder
  • PropertyListDecoder
  • PropertyListEncoder
  1. All classes inheriting from NSObject

Custom conformance

extension Calendar: Appliable {} // value types

extension JSONDecoder: ObjectAppliable {} // reference types
struct Item: Appliable {
    var value: Int?
}

let item = Item().applying {
    $0.value = 1
}

License

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

Description

  • Swift Tools 5.5.0
View More Packages from this Author

Dependencies

  • None
Last updated: Fri Apr 12 2024 17:39:29 GMT-0900 (Hawaii-Aleutian Daylight Time)