ZamzamKit
ZamzamKit is a Swift package for rapid development using a collection of micro utility extensions for Standard Library, Foundation, and other native frameworks.
Installation
Swift Package Manager
.package(url: "[email protected]:ZamzamInc/ZamzamKit.git", .upToNextMajor(from: "5.1.0"))
The ZamzamKit
package contains four different products you can import. Add any combination of these to your target’s dependencies within your Package.swift
manifest:
.target(
name: "MyAppExample",
dependencies: [
.product(name: "ZamzamCore", package: "ZamzamKit"),
.product(name: "ZamzamLocation", package: "ZamzamKit"),
.product(name: "ZamzamNotification", package: "ZamzamKit"),
.product(name: "ZamzamUI", package: "ZamzamKit"),
]
)
Note: This library is highly volatile and changes often to stay ahead of cutting-edge technologies. It is recommended to copy over code that you want into your own libraries or fork it.
ZamzamCore
Standard+
Collection
Get distinct elements from an array:
[1, 1, 3, 3, 5, 5, 7, 9, 9].distinct // [1, 3, 5, 7, 9]
Remove an element from an array by the value:
var array = ["a", "b", "c", "d", "e"]
array.remove("c")
array // ["a", "b", "d", "e"]
Easily get the array version of an array slice:
["a", "b", "c", "d", "e"].prefix(3).array
Safely retrieve an element at the given index if it exists:
items[3].selectedImage = UIImage("my-image")
}
“>
// Before
if let items = tabBarController.tabBar.items, items.count > 4 {
items[3].selectedImage = UIImage("my-image")
}
// After
tabBarController.tabBar.items?[safe: 3]?.selectedImage = UIImage("my-image")
[1, 3, 5, 7, 9][safe: 1] // Optional(3)
[1, 3, 5, 7, 9][safe: 12] // nil
Determine if a value is contained within the array of equatable values:
"b".within(["a", "b", "c"]) // true
let status: OrderStatus = .cancelled
status.within([.requested, .accepted, .inProgress]) // false
Dictionary
Convert to JSON string or data:
// Before
guard let data = try? JSONSerialization.data(withJSONObject: merged, options: []),
let log = String(data: data, encoding: .utf8) else {
return
}
// After
guard let log = merged.jsonString else {
return
}
Number
Round doubles, floats, or any floating-point type:
123.12312421.rounded(toPlaces: 3) // 123.123
Double.pi.rounded(toPlaces: 2) // 3.14
String
Create a new random string of given length:
String(random: 10) // "zXWG4hSgL9"
String(random: 4, prefix: "PIN-") // "PIN-uSjm"
Safely use subscript indexes and ranges on strings:
<div class="highlight highlight-source-swift position-relative" data-snippet-clipboard-copy-content="let value = "Abcdef123456"
value[3] // "d"
value[3..
let value = "Abcdef123456" value[3] // "d" value[3..<6] // "def" value[3...6] // "def1" value[3...] // "def123456" value[3...99] // nil value[99] // nil