タスクはiOS 15の新しいビューモディファイアです.スウィフト


アップルは、新しいViewModifierを加えましたtask(priority:_:) IOS 15で.この修飾子は、任意のSwiftuiに追加することができますView .

task(priority:_:) avalible since iOS15+ macOS 12.0+ Mac Catalyst 15.0+ watchOS 8.0+ tvOS 15.0+


公式のAppleドキュメントから
このビューが表示されるときに非同期タスクを実行します.
func task(priority: TaskPriority = .userInitiated, _ action: @escaping () async -> Void) -> some View
ビューが表示されたときに、指定したアクションを非同期的に実行するビュー.
パラメータについての詳細は
1プライオリティタスク優先順位を作成するときに使用するタスクの優先順位.デフォルトの優先度はuserInitiated .
すべての優先順位リスト
  • userInitiated
  • high
  • medium
  • low
  • utility
  • background
  • 2 Swiftuiがビューが表示されるときに非同期タスクとして呼び出すクロージャを操作します.Swiftuiは、アクションが完了する前にビューが消えた場合、自動的にタスクをキャンセルします.
    この修飾子は、ビューに関連するいくつかの非同期ジョブを開始し、行うには良い点です.非同期タスクをキャンセルすることについて心配する必要はありません.Swiftuiはボックスから処理します.
    Swiftuiは、Swiftuiがビューまたはビューを変更するIDを削除する前に、タスクが終了しない場合にタスクをキャンセルします.

    例:


    Githubのリストユーザーを表示します.各ユーザーのログインとアバターイメージが表示されます.List コード
    @State private var users: [User] = []
    
    var body: some View {
        List(users) { user in
            HStack(spacing: 16) {
                AsyncImage(url: URL(string: user.avatarUrl)) { avatar in
                    avatar
                        .resizable()
                        .aspectRatio(contentMode: .fit)
                        .cornerRadius(16)
                } placeholder: {
                    ProgressView()
                }
                .frame(width: 50, height: 50)
    
                Text(user.login)
                    .font(.title2)
            }.padding(.init(top: 4, leading: 0, bottom: 4, trailing: 0))
        }.task {
            self.users = await loadUsers()
        }
    }
    
    機能に興味がありますloadUsers() . ユーザーの読み込みは、List が現れる.
    まず最初に、機能はgithubからユーザーのJSONを得ます.その後、JSONをオブジェクトにデコードし、結果をList 'sデータソース.loadUsers() 機能
    func loadUsers() async -> [User] {
        guard let url = URL(string: "https://api.github.com/users") else { return [] }
        do {
            let (data, _) = try await URLSession.shared.data(from: url)
            return try JSONDecoder().decode([User].self, from: data)
        } catch {
            Swift.print(error)
            return []
        }
    }
    
    結果
    User モデル
    struct User: Codable, Identifiable {
        let id: Int
        let login: String
        let avatarUrl: String
    
        enum CodingKeys: String, CodingKey {
            case id
            case login
            case avatarUrl = "avatar_url"
        }
    }
    
    モデル実装Codable JSON復号化プロトコル開花CodingKeys スネークケースからの翻訳に使用されます🐍 キャメルケース🐫.
    Full source code
    読書ありがとう!また近いうちに.