インスタンスメソッド


task(id:priority:_:)


このビューが表示されるとき、または指定された値が変更されたときに実行するタスクを追加します。




宣言


func task<T>(id value: T, priority: TaskPriority = .userInitiated, _ action: @escaping () async -> Void) -> some View where T : Equatable


戻り値


ビューが表示されるときに指定されたアクションを非同期で実行するビュー、または id 値が変更された状態でタスクを再開するビュー。


パラメータ


議論


このメソッドは、指定された値が変更したときにタスクをキャンセルもして再作成することを除いて、task(priority:_:) のように動作します。変更を検出するために、修飾子は id パラメータの新しい値が前の値と等しいかどうかをテストします。これが機能するためには、値の型が Equatable プロトコルに準拠していなければなりません。


たとえば、その状態が変化するたびに(たとえば、サインアウト から サインイン に) カスタム通知を投稿する equatable Server 型を定義する場合、タスク修飾子を使用して、現在の状態を選択したサーバに反映するように Text ビューのコンテンツを更新できます:


Text(status ?? "Signed Out")

.task(id: server) {

let sequence = NotificationCenter.default.notifications(

named: .didChangeStatus,

object: server)

for try await notification in sequence {

status = notification.userInfo["status"] as? String

}

}



この例では、notifications(named:object:) メソッドを使用して、AsyncSequence インスタンスによって与えられた通知の非同期シーケンスを無期限に待機します。


他の場所では、サーバはカスタムの didUpdateStatus 通知を定義します。


extension NSNotification.Name {

static var didUpdateStatus: NSNotification.Name {

NSNotification.Name("didUpdateStatus")

}

}


サーバは、ユーザがサインインした後など、状況が変更するたびに、この型の通知を投稿します。


let notification = Notification(

name: .didUpdateStatus,

object: self,

userInfo: ["status": "Signed In"])

NotificationCenter.default.post(notification)


Text ビューに添付されたタスクは、通知のユーザ情報辞書から状況値を取得して表示します。ユーザが別のサーバを選択すると、SwiftUI はタスクをキャンセルして新しいタスクを作成し、新しいサーバからの通知の待機を開始します。



以下も見よ




ビューのライフサイクル




ベータソフトウェア

この文書には、開発中の API または技術に関する予備情報が含まれています。この情報は変更される可能性があり、この 文章に従って実装されたソフトウェアは、最終的なオペレーティングシステムソフトウェアでテストする必要があります。


Apple のベータソフトウェアの使用についての詳細を学ぶ >




















目次
Xcode の新機能

利用可能

iOS 15.0+

macOS 12.0+

Mac Catalyst 15.0+

tvOS 15.0+

watchOS 8.0+


  • フレームワーク
  • SwiftUI

  • 宣言
  • 戻り値
  • パラメータ
  • 議論
  • 以下も見よ












  • トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ