reddavis/validate
A property wrapper that can validate the property it wraps.
Requirements
- iOS 15.0+
- macOS 12.0+
Installation
Swift Package Manager
dependencies: [
.package(url: "https://github.com/reddavis/Validate", from: "2.0.0")
]Documentation
Usage
import SwiftUI
import Validate
struct ContentView: View {
@Validate(.presence()) var name: String = ""
var body: some View {
VStack(spacing: 60) {
VStack {
TextField("Name", text: self.$name.binding)
.textFieldStyle(.roundedBorder)
.padding()
VStack {
ForEach(self.$name.errors.localizedDescriptions, id: \.self) { message in
Text(message)
.foregroundColor(.red)
.font(.footnote)
}
}
}
Button("Save") {
print(self.name)
}
.buttonStyle(.bordered)
}
}
}Built in validations
Validate includes several validations:
Building validations
You're not just limited to using the built in validations but can build your own by using the Validation builder.
This is how the built in presence validation is built:
public extension Validation {
/// Validate an optional value is present.
///
/// If the value is nil, it is considered invalid.
/// - Parameters:
/// - message: A custom error message.
/// - Returns: A Validation instance.
static func presence<T>(
message: String? = nil
) -> Validation<Optional<T>> {
.init { value in
if value == nil {
throw ValidationError.build(message: message)
}
}
}
}Other libraries
Check out some of my other libraries:
- Papyrus - Papyrus aims to hit the sweet spot between saving raw API responses to the file system and a fully fledged database like Realm.
- RedUx - A super simple Swift implementation of the redux pattern making use of Swift 5.5's new async await API's.
- Kyu - A persistent queue system in Swift.
- FloatingLabelTextFieldStyle - A floating label style for SwiftUI's TextField.
- Panel - A panel component similar to the iOS Airpod battery panel.
Package Metadata
Repository: reddavis/validate
Default branch: main
README: README.md