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

swiftui开发页面加载发送请求初始化@State变量

在SwiftUI中,你不能直接在init中更新@State变量,因为@State是由SwiftUI框架管理的,初始化时不允许直接修改。所以需要在onAppear发送请求然后修改@State状态。

在SwiftUI中,如果希望在页面加载时立即发送网络请求,可以使用onAppear修饰符来触发请求。

以下是完整示例,展示如何在SwiftUI页面加载时使用Alamofire获取GitHub仓库中指定文件的SHA。

1. 添加Alamofire依赖

Package.swift或Xcode的Swift Packages中添加Alamofire

dependencies: [
    .package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.0.0")
]

2. SwiftUI页面加载时发送请求

import SwiftUI
import Alamofire

struct ContentView: View {
    @State private var sha: String = "Loading..."

    var body: some View {
        VStack {
            Text("File SHA")
                .font(.title)
            Text(sha)
                .font(.body)
                .padding()
        }
        .onAppear {
            fetchFileSHA(owner: "apple", repo: "swift", path: "README.md")
        }
    }

    // 网络请求方法
    func fetchFileSHA(owner: String, repo: String, path: String) {
        let url = "https://api.github.com/repos/\(owner)/\(repo)/contents/\(path)"
        
        // 可选:添加token提升访问速率限制
        let headers: HTTPHeaders = [
            "Authorization": "token YOUR_PERSONAL_ACCESS_TOKEN"
        ]
        
        AF.request(url, headers: headers)
            .validate()  // 验证请求是否成功(状态码200-299)
            .responseDecodable(of: GitHubFileResponse.self) { response in
                switch response.result {
                case .success(let fileData):
                    sha = fileData.sha
                case .failure(let error):
                    sha = "Error: \(error.localizedDescription)"
                }
            }
    }
}

// GitHub API 响应模型
struct GitHubFileResponse: Decodable {
    let sha: String
}

3. 代码说明

  • onAppear:页面加载时触发,确保首次显示时就发送网络请求。
  • @State:使用@State管理SHA的状态,更新后自动刷新页面。
  • validate():确保状态码在200-299之间,保证请求成功。
  • responseDecodable:直接解析返回的JSON为GitHubFileResponse模型。

4. 示例返回的JSON格式

GitHub API返回的JSON示例如下:

{
  "name": "README.md",
  "path": "README.md",
  "sha": "abc123def456",
  "size": 123,
  "type": "file",
  "content": "SGVsbG8gd29ybGQ=",
  "encoding": "base64"
}

5. 注意事项

  1. 访问令牌(Token):如果请求频繁,可以在GitHub创建一个个人访问令牌并替换YOUR_PERSONAL_ACCESS_TOKEN,否则可能会遇到API访问限制。

  2. 私有仓库访问:访问私有仓库必须提供访问令牌,否则返回404或403错误。

  3. 请求优化:对于大型文件,GitHub可能返回内容的base64编码,如果只需SHA,响应速度较快。


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

相关文章:

  • Docker安装(Docker Engine安装)
  • python制作打字小游戏
  • BootstrapTable处理表格
  • linux文件类型和根目录结构
  • Apache MINA 反序列化漏洞CVE-2024-52046
  • java实现一个kmp算法
  • flash-attention保姆级安装教程
  • 脚本方式 迁移 老GITLAB项目到新GITLAB
  • 前端vue+el-input实现输入框中文字高亮标红效果(学习自掘金博主文章)
  • 服务器系统维护与安全配置
  • 黑马商城:MybatisPlus
  • img上的title属性和alt属性的区别是什么?
  • Oracle 数据库 dmp文件从高版本导入低版本的问题处理
  • C++ 环境搭建 - 安装编译器、IDE选择
  • WebRTC音视频通话系统需求(项目预算)
  • ffmpeg 编译+ libx264
  • Golang 的AI 框架库
  • Windows电脑带有日历的桌面备忘记事工具
  • shell脚本的使用
  • 【基础还得练】EM算法中的E
  • 【Qt】信号和槽机制
  • 【MyBatis-Plus】让 MyBatis 更简单高效
  • 【Kafka 消息队列深度解析与应用】
  • 基于zynq在linux下的HDMI实战
  • labelme2yolov8-seg 草稿()
  • 头歌python:多进程和多线程