関数の呼び出し - Swift SDK
Atlas Device SDK は非推奨です。 詳細については、 の廃止ページを参照してください。
名前を使用して関数を呼び出す
重要
Atlas Functions を使用する際は、コード インジェクションから保護するために、クライアント データを必ずサニタイズしてください。
2 つの引数を受け取り、それらを連結して結果を返す concatenate
という名前の Atlas App Services 関数を考えてみましょう。
// concatenate: concatenate two strings exports = function(a, b) { return a + b; };
Swift SDK から関数を実行するには、現在ログインしているユーザーのfunctions
オブジェクトを使用します。
functions
オブジェクトには、関数に対応する動的ノードがあります。 この場合、 functions.concatenate()
はconcatenate
関数を参照します。 引数のBSONArray
を渡します。 末尾の閉じるは、関数の呼び出しが完了したときに呼び出される完了ハンドラーです。 このハンドラーは非メインのグローバルDispatchQueue
で実行されます。
RLMApp *app = [RLMApp appWithId:YOUR_APP_ID]; // ... log in ... RLMUser *user = [app currentUser]; // Call concatenate function [user callFunctionNamed:@"concatenate" arguments:@[@"john.smith", @"@companyemail.com"] completionBlock:^(id<RLMBSON> result, NSError *error) { if (error) { NSLog(@"Function call failed: %@", [error localizedDescription]); return; } NSLog(@"Called function 'concatenate' and got result: %@", result); assert([result isEqual:@"john.smith@companyemail.com"]); }];
let app = App(id: YOUR_APP_SERVICES_APP_ID) // ... log in ... let user = app.currentUser! // 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. // 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`. user.functions.concatenate([AnyBSON("john.smith"), AnyBSON("@companyemail.com")]) { concatenate, error in guard error == nil else { print("Function call failed: \(error!.localizedDescription)") return } guard case let .string(value) = concatenate else { print("Unexpected non-string result: \(concatenate ?? "nil")") return } print("Called function 'concatenate' and got result: \(value)") assert(value == "john.smith@companyemail.com") }
Async/Await 関数の呼び出し
バージョン 10.16.0 の新機能。
Realm Swift SDK は、 User.function
メソッドの async/await バージョンを提供します。
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)") } }
Realm Swift SDK バージョン 10.15.0 および 10.16.0 以降では、Realm API の多くが Swift async/await 構文をサポートしています。 プロジェクトは、次の要件を満たしている必要があります。
Swift SDK バージョン | Swift バージョン要件 | サポートされている OS |
---|---|---|
10.25.0 | Swift 5.6 | iOS 13.x |
10.15.0 または 10.16.0 | Swift 5.5 | iOS 15.x |
アプリがasync/await
コンテキストで Realm にアクセスする場合は、スレッド関連のクラッシュを回避するためにコードを@MainActor
でマークします。