Swift网络编程:从套接字到WebSocket

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift网络编程:从简单到复杂



当你第一次打开Xcode并看到一个空项目时,似乎距离真正的网络交互魔法还很遥远。但请相信我:Swift网络编程并非火箭科学,而是一个切实可行的工具,它能将本地应用转变为全球互联网的一部分。今天,我们将探讨如何让你的应用与服务器“对话”、交换数据,并优雅地完成这一切。



我将向你展示的不仅仅是枯燥的定义,而是iOS开发者日常生活中的真实场景。你将了解Swift网络交互在底层(套接字)和高层(URLSession)是如何工作的。最后还有彩蛋:如何连接WebSocket实现实时聊天。我们开始吧!



理解基础:Swift世界中的网络是如何运作的



在编写代码之前,让我们先理清概念。Swift网络编程基于与其他语言相同的原理:客户端-服务器架构、TCP/UDP协议、IP地址和端口。但有一个细微差别——Apple生态系统提供了自己的框架,使开发者的生活更加轻松。



Swift中用于网络工作的关键技术



  • URLSession — 用于HTTP/HTTPS请求的主要工具。支持REST API、文件下载、后台任务等。
  • Network.framework — 对套接字、TCP/UDP的低级访问。自iOS 12引入,取代了旧的CFNetwork。
  • WebSocket (URLSessionWebSocketTask) — 用于实时双向通信。
  • CFStream — 一种较旧但仍可用的数据流处理方式。


我个人建议从URLSession开始——这就像驾驶自动挡汽车。当你想体验“手动挡”时,再切换到Network.framework。



URLSession:你在Swift网络编程中的主要伙伴



我们从最流行的工具开始。URLSession Swift是一个强大的框架,用于通过网络发送和接收数据。它支持缓存、认证、后台下载等功能。



基本GET请求



想象一下,你的应用需要从服务器显示用户列表。以下是实现方法:



import Foundation

// 1. 创建URLguard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else { fatalError("Invalid URL")}

// 2. 创建任务let task = URLSession.shared.dataTask(with: url) { data, response, error in // 3. 处理错误 if let error = error { print("错误: \\(error.localizedDescription)") return } // 4. 检查服务器响应 guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else { print("无效的状态码") return } // 5. 处理数据 if let data = data { do { let users = try JSONDecoder().decode([User].self, from: data) print("获取到 \\(users.count) 个用户") } catch { print("解析错误: \\(error)") } }}

// 6. 启动任务task.resume()


请注意:task.resume()是必须的!否则请求永远不会执行。这是Swift网络编程新手常犯的错误。



带请求体的POST请求



现在,让我们向服务器发送数据:



func createUser(name: String, email: String) {    guard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else {        return    }        var request = URLRequest(url: url)    request.httpMethod = "POST"    request.setValue("application/json", forHTTPHeaderField: "Content-Type")        let body                

博客

书籍推荐