Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

関数の呼び出し - Swift SDK

項目一覧

  • 名前を使用して関数を呼び出す
  • Async/Await 関数の呼び出し

重要

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")
}

バージョン 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でマークします。

戻る

App Services Appへの接続