iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
Mobile Development

Xcode x Swift Vibe coding進階開發之旅系列 第 9

Xcode x Swift Vibe coding進階開發之旅 第九天 swift接語法非同步(1) async/await與基本介紹

  • 分享至 

  • xImage
  •  

說明

原本要繼續做點名系統但是發現有問題正在除錯,所以先把後面要放的東西難道前面放./images/emoticon/emoticon02.gif

🔧 為什麼需要非同步處理?

當你執行像是 API 請求、圖片下載或大型資料計算時,這些操作如果在主執行緒上執行,會導致 UI 卡頓、App 無反應(甚至被系統強制關閉)。為了改善這種問題,我們使用「非同步處理」來把耗時任務移到背景執行緒,讓主執行緒保持流暢。

🚀 async/await

async/await 是 Swift Concurrency 的核心語法,可以讓非同步程式碼變得像同步一樣好讀。
async:表示這個closure會用非同步異步的方式執行
await:表是暫停點接下來的內容可以被暫停稍後再執行
範例:網路請求

func fetchData() async throws -> Data {
    let url = URL(string: "https://api.example.com/data")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return data
}

async/task:都能用來建立一段異步執行的空間
task之中的任務獨立於原本的同步執行空間
範例:呼叫 async 函式

Task {
    do {
        let data = try await fetchData()
        print("成功取得資料:\(data)")
    } catch {
        print("錯誤:\(error)")
    }
}

在主執行緒執行
範例三種寫法

@MainActor
func dog(){
    
}

Task { @MainActor in 
    dog()
}

Task { 
      await MainActor.run{
    dog()
      }
}

💡 使用注意事項

永遠不要在背景執行緒更新 UI,應使用 DispatchQueue.main.async {}。

避免死鎖:不要同步(sync)地呼叫主執行緒內部邏輯。

記憶體管理:非同步閉包內使用 self 時記得 [weak self],避免循環引用。

測試非同步程式:XCTest 支援 async 測試方法,例如 async throws。

上一篇
bile Development Xcode x Swift Vibe coding進階開發之旅 第八天 點名系統(4) 建立新增頁面與button
系列文
Xcode x Swift Vibe coding進階開發之旅9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言