iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0

在現代的應用開發中,網絡通信已成為不可或缺的一部分。無論是從伺服器取得最新的資料、上傳用戶生成的內容,還是與API進行交互,網絡都扮演了關鍵角色。在這一章節,我們將探索Swift在iOS中如何進行網絡操作,尤其是使用URLSession進行基本的HTTP請求。

URLSession的概念

URLSession是iOS中處理網絡任務的主要工具。它可以執行數據任務、上傳任務和下載任務。

創建一個基本的GET請求示例:

let url = URL(string: "https://api.example.com/data")!
let task = URLSession.shared.dataTask(with: url) { data, response, error in
    guard let data = data, error == nil else {
        print("Error: \(error?.localizedDescription ?? "Unknown error")")
        return
    }
    // 使用data做後續處理...
}
task.resume()

下載和解析JSON

許多現代Web API都使用JSON格式返回數據。Swift提供了JSONDecoder來輕鬆地將JSON數據轉換為Swift對象。

先定義一個模型:

struct Item: Codable {
    let id: Int
    let name: String
    let description: String
}

接著,使用JSONDecoder解析數據:

let decoder = JSONDecoder()
if let items = try? decoder.decode([Item].self, from: data) {
    print(items)
}

上傳數據

進行POST請求並上傳數據:

let url = URL(string: "https://api.example.com/upload")!
var request = URLRequest(url: url)
request.httpMethod = "POST"

let item = Item(id: 1, name: "Example", description: "Description")
let encoder = JSONEncoder()
if let jsonData = try? encoder.encode(item) {
    request.httpBody = jsonData
}

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    // 處理響應或錯誤...
}
task.resume()

處理網絡錯誤

網絡請求可能因各種原因失敗,例如:網絡中斷、伺服器錯誤或請求超時。正確處理這些錯誤對於提供穩定的用戶體驗至關重要。

if let error = error {
    print("Error: \(error.localizedDescription)")
    return
}
guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else {
    print("Invalid server response")
    return
}

URLComponents和查詢參數

在某些情況下,你可能需要向URL添加查詢參數。URLComponents是一個非常有用的工具,可以幫助你輕鬆地構造和修改URL。

var components = URLComponents(string: "https://api.example.com/search")!
components.queryItems = [
    URLQueryItem(name: "query", value: "Swift")
]
let url = components.url!

結論

網絡在今天的應用程序中佔有重要地位,無論是獲取數據還是與伺服器交互。URLSession提供了一個強大且靈活的框架,可以輕鬆完成這些任務。在這個章節中,我們探索了基本的HTTP請求、JSON的解碼/編碼,以及錯誤處理,為你在Swift中的網絡打下了堅實的基礎。


上一篇
第二十一天:手勢識別器
下一篇
第二十三天:UserDefaults
系列文
swift 30天之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言