当前位置: 首页 > article >正文

在swiftui中使用Alamofire发送请求获取github仓库里的txt文件内容并解析

要在 SwiftUI 中使用 Alamofire 获取 GitHub 仓库中的文本文件内容(如 Base64 编码的文件),需要先发送请求获取文件元数据,然后解码文件内容。

以下是一个完整示例,展示如何从 https://api.github.com/repos/Sjj1024/Sjj1024/contents/docs/gitasync.txt 获取文件内容并解析为文本格式。


代码示例

import SwiftUI
import Alamofire

struct ContentView: View {
    @State private var fileContent: String = "加载中..."

    var body: some View {
        VStack {
            Text("GitHub 文件内容:")
                .font(.headline)
                .padding()

            ScrollView {
                Text(fileContent)
                    .padding()
            }

            Button("重新加载") {
                fetchFileContent()
            }
            .padding()
        }
        .onAppear {
            fetchFileContent()
        }
    }

    // 发送请求获取文件内容
    func fetchFileContent() {
        let fileURL = "https://api.github.com/repos/Sjj1024/Sjj1024/contents/docs/gitasync.txt"
        
        AF.request(fileURL).responseDecodable(of: GitHubFile.self) { response in
            switch response.result {
            case .success(let gitHubFile):
                if let decodedContent = decodeBase64(gitHubFile.content) {
                    fileContent = decodedContent
                } else {
                    fileContent = "解码失败"
                }
            case .failure(let error):
                fileContent = "加载失败: \(error.localizedDescription)"
            }
        }
    }

    // Base64 解码
    func decodeBase64(_ base64String: String) -> String? {
        // 去除可能的换行符和空格
        let cleanedBase64 = base64String.replacingOccurrences(of: "\n", with: "")
        
        // 尝试解码
        if let data = Data(base64Encoded: cleanedBase64) {
            return String(data: data, encoding: .utf8)
        }
        return nil
    }
}

// 定义 GitHub 文件数据结构
struct GitHubFile: Decodable {
    let name: String
    let path: String
    let content: String
    let encoding: String
}

代码说明

  1. GitHub API 地址:GitHub API 返回的文件内容通常是 Base64 编码的,因此需要解码。
  2. 数据模型:使用 GitHubFile 结构体解析 JSON 响应。
  3. 请求和解析
    • 使用 responseDecodable 自动解析 GitHub API 响应。
    • 提取 content 字段并进行 Base64 解码。
  4. Base64 解码
    • 删除响应内容中的换行符(GitHub API 返回的内容通常带有换行符)。
    • 解码后转换为 String 并显示。

解析 GitHub API 响应示例

GitHub API 可能返回如下格式的 JSON 数据:

{
  "name": "gitasync.txt",
  "path": "docs/gitasync.txt",
  "content": "U29tZSBzYW1wbGUgdGV4dA==\n",
  "encoding": "base64"
}
  • content 是 Base64 编码的,需要解码为纯文本。

注意事项

  1. 网络权限:确保在 Info.plist 中添加以下内容,允许访问 GitHub API:
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    
  2. API 限流:GitHub API 有速率限制(通常未认证用户每小时最多 60 次请求)。如需更多请求,建议使用 GitHub 个人访问令牌。
  3. 错误处理:可以进一步扩展失败分支,处理各种响应状态码。

示例输出

GitHub 文件内容:
Some sample text

http://www.kler.cn/a/467767.html

相关文章:

  • 前后端环境配置java/vue/maven/node.js/mysql
  • 级联配准learning
  • 感知器的那些事
  • Java中的CAS操作是什么?它如何实现无锁编程?
  • Chapter4.3:Implementing a feed forward network with GELU activations
  • 百度贴吧的ip属地什么意思?怎么看ip属地
  • 芯片引脚类型检测数据集VOC+YOLO格式582张5类别
  • 【小程序】5分钟快速入门抓包微信小程序
  • 短信通知在 IOS 17/18 中不起作用?这是修复方法
  • Scala_【4】流程控制
  • 封装的作用
  • CentOS 8 上搭建SFTP服务
  • C++软件设计模式之中介者模式
  • 检索增强生成 和思维链 结合: 如何创建检索增强思维链 (RAT)?
  • 基于feapder爬虫与flask前后端框架的天气数据可视化大屏
  • 【TCP】SYN、ACK、FIN、RST、PSH、URG的全称
  • STM32 拓展 低功耗案例3:待机模式 (hal)
  • 网络IP协议
  • 算法解析-经典150(链表、二叉树)
  • 《学校一卡通管理系统》数据库MySQL的设计与实现
  • Global 远程需求
  • unity学习7:unity的3D项目的基本操作: 坐标系
  • C++软件设计模式之迭代器模式
  • es 3期 第20节-运用指标聚合快速统计数值
  • 面向对象分析与设计Python版 面向对象的核心特征
  • 功能篇:表单提交,multiple-data方式提交文件,后端接收方式