FirebaseHelper
FirebaseHelper is a small wrapper over Firebase's realtime database, providing streamlined methods for get, set, delete, and increment values.
Features
- Setup Firebase Realtime Database Ref
- Read values (get)
- Write/Update values (set)
- Remove values (delete)
- Increment values (increment)
Requirements
Swift 4
Installation
FirebaseHelper is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'FirebaseHelper'
Usage
Initialize an instance of FirebaseHelper:
import Firebase
import FirebaseHelper
let firebaseHelper = FirebaseHelper(FirebaseDatabase.Database.database().reference())
FirebaseHelper(_ ref: DatabaseReference) takes in a DatabaseReference. Generally you'd want this to be the root of your database.
For convenience, you can add something like this to your project:
extension FirebaseHelper {
static let main: FirebaseHelper = {
FirebaseHelper(FirebaseDatabase.Database.database().reference())
}()
}
And now you can simply call FirebaseHelper.main to access this instance of FirebaseHelper from anywhere in your project.
Common Database Operations
Get
Example:
FirebaseHelper.main.get("users", "john123", "favoriteFood") { result in
switch result {
case .failure(let error):
// handle error
case .success(let data):
// get string from data
}
}
API:
public func get(_ first: String, _ rest: String..., completion: @escaping (Result<DataSnapshot, Error>) -> Void)
get() takes in a variadic parameter of child nodes that will be built on the DatabaseReference you initialized your instance of FirebaseHelper on.
The callback returns a Result:
public enum Result<T, Error> {
case success(T)
case failure(Error)
}
In this case, T is DataSnapshot. An error case will either be because an invalid child was passed in or some other error in your database.
Set, Delete, Increment
set(), delete(), and increment() work similarly, but instead of returning a Result, they simply return an Error if one occurred, or nil otherwise.
Examples:
// The first parameter is an `Any` that gets set at the specified path.
FirebaseHelper.main.set("pizza", at: "users", "john123", "favoriteFood") { error in
if let error = error {
// handle error
}
}
FirebaseHelper.main.delete("users", "john123", "favoriteFood") { error in
if let error = error {
// handle error
}
}
FirebaseHelper.main.increment(by: 5, "users", "john123", "favoriteFoodEatenThisMonth") {
if let error = error {
// handle error
}
}
APIs:
public func set(_ value: Any, at first: String, _ rest: String..., completion: @escaping (Error?) -> Void)
public func delete(_ first: String, _ rest: String..., completion: @escaping (Error?) -> Void)
public func increment(by amount: Int, at first: String, _ rest: String..., completion: @escaping (Error?) -> Void)
Note: You should only
set()accepted value types. See Firebase docs.
Safely Make A DatabaseReference
You will often need to call more complex FirebaseDatabase functions, such as building a query and calling observe(_ eventType: with block:) on it. FirebaseHelper can still help with that:
let ref = try? FirebaseHelper.main.makeReference("users", "john123", "eatingHistory")
let handle = ref?.queryOrdered(byChild: "timestamp").queryLimited(toLast: 50).observe(.value) { data in
// handle data
}
API:
public func makeReference(_ first: String, _ rest: String...) throws -> DatabaseReference
makeReference will throw an error if passed an invalid child.
Collaborators
License
FirebaseHelper is available under the MIT license. See the LICENSE file for more info.