苹果iOS开发中的网络数据任务API:URLSession入门实战

news2024/9/22 10:04:11

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

URLSession 是 iOS 开发中的一个 API,用于执行网络数据任务,如 HTTP 请求、文件下载和上传等。URLSession 提供了一种高效的方式来处理网络请求,并支持多种任务类型,如数据任务、下载任务和上传任务。

以下是详细介绍如何在 iOS 开发中使用 URLSession

1. URLSession的基本概念

URLSession 是一个容器对象,用于创建和管理与服务器之间的数据传输任务。URLSession 提供了默认的共享会话(共享实例),也可以配置自定义会话。

  • URLSessionConfiguration:配置 URLSession 的行为,比如缓存策略、超时时间等。
  • URLSessionTask:代表一个特定的请求任务,比如数据任务、下载任务和上传任务。

2. 创建一个简单的 GET 请求

下面是一个简单的 GET 请求示例,使用 URLSession 来获取数据:

import Foundation

// 创建 URL 对象
if let url = URL(string: "https://api.example.com/data") {
    
    // 创建默认的 URLSession
    let session = URLSession.shared
    
    // 创建 data task 对象
    let task = session.dataTask(with: url) { (data, response, error) in
        // 检查错误
        if let error = error {
            print("Error occurred: \(error)")
            return
        }
        
        // 检查响应和数据
        if let httpResponse = response as? HTTPURLResponse,
           httpResponse.statusCode == 200,
           let data = data {
            // 处理数据
            if let responseString = String(data: data, encoding: .utf8) {
                print("Response data: \(responseString)")
            }
        }
    }
    
    // 启动任务
    task.resume()
}

3. 创建 POST 请求

下面是一个 POST 请求示例,使用 URLSession 发送数据到服务器:

import Foundation

// 创建 URL 对象
if let url = URL(string: "https://api.example.com/post-data") {
    
    // 创建 URLRequest 对象
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    
    // 设置请求头(如果需要)
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    
    // 设置请求体
    let body = ["key": "value"]
    request.httpBody = try? JSONSerialization.data(withJSONObject: body, options: [])
    
    // 创建默认的 URLSession
    let session = URLSession.shared
    
    // 创建 data task 对象
    let task = session.dataTask(with: request) { (data, response, error) in
        // 检查错误
        if let error = error {
            print("Error occurred: \(error)")
            return
        }
        
        // 检查响应和数据
        if let httpResponse = response as? HTTPURLResponse,
           httpResponse.statusCode == 200,
           let data = data {
            // 处理数据
            if let responseString = String(data: data, encoding: .utf8) {
                print("Response data: \(responseString)")
            }
        }
    }
    
    // 启动任务
    task.resume()
}

4. 使用 URLSessionConfiguration 自定义会话

有时候你需要自定义会话,比如设置缓存策略、超时时间等:

import Foundation

// 创建 URLSessionConfiguration 对象
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 30.0
configuration.requestCachePolicy = .reloadIgnoringLocalCacheData

// 创建 URLSession 对象
let session = URLSession(configuration: configuration)

// 创建 URL 对象
if let url = URL(string: "https://api.example.com/data") {
    
    // 创建 data task 对象
    let task = session.dataTask(with: url) { (data, response, error) in
        // 处理响应
        
        // 启动任务
        task.resume()
    }
}

5. URLSessionDelegate 的使用

如果你需要处理认证、重定向等操作,可以通过实现 URLSessionDelegate 和相关的协议。

import Foundation

class MyURLSessionDelegate: NSObject, URLSessionDelegate {
    
    func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
        // 处理服务器认证挑战
        let credential = URLCredential(trust: challenge.protectionSpace.serverTrust!)
        completionHandler(.useCredential, credential)
    }
}

// 创建 URLSessionConfiguration 对象
let configuration = URLSessionConfiguration.default

// 创建 URLSession 对象,指定委托
let delegate = MyURLSessionDelegate()
let session = URLSession(configuration: configuration, delegate: delegate, delegateQueue: nil)

总结

URLSession 是一个强大且灵活的网络 API,可以处理复杂的网络请求和响应。通过上述示例,你可以实现基本的 GET 和 POST 请求,自定义会话配置,并处理更多的高级网络任务。具体使用时,还可以根据需求进一步扩展和优化代码。


欢迎关注我的公众号AntDream查看更多精彩文章!

AntDream

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1972381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

射频工程师主要是干什么?

在硬件从业者中,有一部分从业者是专门负责射频,天线,基站信号相关工作内容的,他们也被称为射频工程师。并且相比与普通的硬件工程师,硬件测试工程师,专门做射频部分的射频工程师,相同年限下薪资…

LLM:混合精度量化概述

浮点数在计算机中的存储方式由符号位(sign)、指数位(exponent)和小数位(fraction,也称为尾数、mantissa)组成。以下是对这些部分的详细说明: 符号位(Sign Bit&#xff09…

【Vue3】组件通信之props

【Vue3】组件通信之props 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日…

发送邮箱调用接口时需要注意哪些安全事项?

发送邮箱调用接口的使用方法?如何集成三方API接口? 无论是系统通知、用户注册验证还是营销邮件,这些功能都依赖于邮件发送接口的稳定和安全。然而,确保这些接口的安全性是至关重要的,AokSend将详细讨论在发送邮箱调用…

超13万律师使用的工具,启信宝推出“司法大数据”功能

合合信息旗下的启信宝,作为行业领先的商业查询APP,依托其3亿企业及机构的实时动态数据,涵盖工商、股权、司法、知识产权等多维度信息,推出了“司法大数据”功能。 随着大数据、人工智能技术的发展,律师行业已转型为开…

怎么写文献综述

怎么写文献综述 写文献综述是对已有文献资料进行系统性和批判性的评述和总结,以了解当前研究领域的研究成果和发展动态。 以下是撰写文献综述的一般步骤: 选择主题和目标: 确定你要综述的主题领域,并明确综述的目标和范围。这有…

蓝牙网关和蓝牙MESH总结

可参考: https://zhuanlan.zhihu.com/p/695144946 蓝牙网关 参考: https://www.bilibili.com/read/cv28872282/ 蓝牙网关是一种特殊的网络设备,它能够实现蓝牙设备与互联网或其他类型网络之间的数据传输和通信。通过蓝牙网关,用户…

Leetcode238. 除自身以外数组的乘积(java实现)

今天分享的题目是letcode238. 除自身以外数组的乘积 先来看题目描述: 本道题我最先想到的是先乘积所有的元素,然后除以所有元素,但是本题无法使用除法。 本题的解题思路是使用前缀积。 拿nums[]{1,2,3,4}; 先遍历前缀积,num[0]的…

Spring AOP总结

1、AOP(Aspect-Oriented Programming):面向切面编程让开发更高效。 工作中经常需要处理日志记录、事物管理、安全控制等跨越多个业务模块的公共逻辑。 它是一种编程的范式。它通过将跨多个业务模块的公共逻辑抽取并封装成独立的模块&#xf…

人工智能大模型综述学习笔记

目录 一、深度学习的局限性和大模型发展背景 二、大模型架构 1、多头自注意力机制 2、Transformer架构 三、常见大模型发展概况 1、语言大模型发展概况 掩码语言模型解释 因果语言模型解释 何时使用什么? 2、视觉-语言大模型 四、大模型的特点 1、大模型…

uni-app项目打包成H5部署到服务器

1. uni-app项目打包成H5部署到服务器 前端使用 uniapp开发项目完成后,需要将页面打包,生成H5的静态文件,部署在服务器上。这样通过服务器链接地址,直接可以在手机上点开来访问。   将项目打包成H5部署到服务器,然后链…

Java中类的构造

1.私有化成员变量。 2.空参构造方法。 3.带全部参数的构造方法。 4.get / set方法。 package demo;public class student{//1.私有化成员变量。//2.空参构造方法。//3.带全部参数的构造方法。//4.get / set方法。private String name;private int age;public student() {}pu…

基于SpringBoot+Vue的多媒体信息共享平台(带1w+文档)

基于SpringBootVue的多媒体信息共享平台(带1w文档) 基于SpringBootVue的多媒体信息共享平台(带1w文档) 随着武理多媒体信息共享平台的不断出现,用户需求不断增多,武理多媒体信息共享平台也不断的得到壮大。该系统主要是满足多方面的需求的实际需要&#…

MySQL案例:MHA实现主备切换(主从架构)万字详解

目录 MHA 概念 MHA的组成 特点 案例介绍 (1)案例需求 (2)案例实现思路 (3)案例拓扑图 (4)案例环境 案例步骤 基本环境配置 关闭防火墙和内核安全机制 安装数据库 授权…

数据结构——链式结构二叉树

目录 一、二叉树的链式结构 二、手动创建一棵链式二叉树 三、 二叉树的遍历 (1)前序遍历(先序遍历) (2)中序遍历 (3)后序遍历 四、二叉树的有关函数 (1)头文件 (…

【机器学习】逻辑回归的梯度下降以及在一变量数据集、两变量数据集下探索优化的梯度下降算法

引言 在机器学习中,逻辑回归是一种用于二分类问题的方法。它使用逻辑函数(也称为sigmoid函数)来预测属于某个类别的概率。逻辑回归的损失函数通常是交叉熵损失,用于衡量预测值与真实值之间的差异 文章目录 引言一、逻辑回归的梯度…

电机的伺服调试和pid调节有什么异同?

电机的伺服调试和PID调节在调节控制系统的精度和性能方面都是重要的,但它们有不同的侧重点和方法: 伺服调试 定义:伺服调试是指对伺服系统进行优化和调整,以确保其在控制对象(如电机)上的表现达到预期。伺…

《LeetCode热题100》---<5.②普通数组篇五道>

本篇博客讲解LeetCode热题100道普通数组篇中的六道题 第三道:轮转数组(中等) 第四道:除自身以外数组的乘积(中等) 第三道:轮转数组(中等) 方法一:使用额外的数…

KubeSphere 部署的 Kubernetes 集群使用 GlusterFS 存储实战入门

转载:KubeSphere 部署的 Kubernetes 集群使用 GlusterFS 存储实战入门 知识点 定级:入门级 GlusterFS 和 Heketi 简介 GlusterFS 安装部署 Heketi 安装部署 Kubernetes 命令行对接 GlusterFS 实战服务器配置(架构1:1复刻小规模生产环境,…

AI助力,轻松组建你的汽车梦之队!

咱汽车销售想增加目标客户,可不简单!市场竞争那叫一个激烈,吸引客户注意力太难了!不过别怕,咱有办法。我在 ai123.cn 这个平台上,找到了好多适合咱的 AI 工具和资源,这就跟大家分享分享。 比如说…