Call a Function - Swift SDK
Call a Function by Name
Make sure to sanitize client data to protect against code injection when using Functions.
Consider a Realm function named concatenate
that
takes two arguments, concatenates them, and returns the result:
// concatenate: concatenate two strings exports = function(a, b) { return a + b; };
To execute a function from the iOS Client SDK, use the functions
object on the currently logged-in user.
The functions
object has dynamic members corresponding to functions.
In this case, functions.concatenate()
refers to the concatenate
function. Pass a BSONArray
of arguments. The trailing closure is the
completion handler to call when the function call is complete. This handler
is executed on a non-main global DispatchQueue
.
Async/Await Call a Function
New in version 10.16.0.
The Realm Swift SDK offers async/await versions of the User.function
methods.
func testAsyncCallFunction() async { let app = App(id: YOUR_APP_SERVICES_APP_ID) // ... log in ... let user = app.currentUser! do { // The dynamic member name `concatenate` is directly associated with the // function name. The first argument is the `BSONArray` of arguments to be // provided to the function - in this case, a string that represents a // username and a string that represents an email domain. let concatenatedString = try await user.functions.concatenate([AnyBSON("john.smith"), AnyBSON("@companyemail.com")]) print("Called function 'concatenate' and got result: \(concatenatedString)") assert(concatenatedString == "john.smith@companyemail.com") } catch { print("Function call failed: \(error.localizedDescription)") } }
Starting with Realm Swift SDK Versions 10.15.0 and 10.16.0, many of the Realm APIs support the Swift async/await syntax. Projects must meet these requirements:
Swift SDK Version | Swift Version Requirement | Supported OS |
---|---|---|
10.25.0 | Swift 5.6 | iOS 13.x |
10.15.0 or 10.16.0 | Swift 5.5 | iOS 15.x |