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

swiftui中struct该如何使用?可选字段怎么定义?使用Alamofire发送请求接收responseDecodable相应解析

在 SwiftUI 中,定义一个 struct 非常简单,和标准的 Swift 语言保持一致。你可以使用 struct 关键字定义结构体。如果 struct 中的字段是可选的,可以通过在字段类型后添加 ? 来定义可选类型。

1. 定义基本的 Struct

struct User {
    var name: String
    var age: Int
}

2. 定义包含可选字段的 Struct

struct User {
    var name: String
    var age: Int?
    var email: String?
}

在这个例子中,ageemail 是可选字段,可以为 nil

3. 创建 Struct 实例

你可以在初始化时不提供可选字段的值:

let user1 = User(name: "Alice", age: nil, email: "alice@example.com")
let user2 = User(name: "Bob")

4. 访问可选字段

访问可选字段时,需要进行解包,避免 nil 引发运行时错误:

  • 可选绑定 (if let):
if let userAge = user1.age {
    print("Age: \(userAge)")
} else {
    print("Age not provided")
}
  • 空合并运算符 (??):
let displayAge = user1.age ?? 0
print("Age: \(displayAge)")
  • 可选链:
print(user1.email?.uppercased() ?? "No email")

5. 默认值

你还可以在定义时提供默认值:

struct User {
    var name: String
    var age: Int? = nil
    var email: String? = "Not provided"
}

这样初始化时,email 默认会是 "Not provided"age 默认是 nil

这种方式非常适合 SwiftUI 数据模型的定义,让代码更具灵活性和安全性。

responseDecodable解析相应

responseDecodable返回的数据需要定义一个结构体来接收和解析,对于可选字段,就可以使用?来定义和接收。比如有的相应就没有data,自然定义的结构体数据就都只能是可选的字段了:

// GitHub API 响应数据模型
struct GitHubRes: Decodable {
    let sha: String?
}

然后使用AF发送请求:

// GitHub API 参数
        let url = "URL地址"
            
        // 构建请求体
        let parameters: [String: Any] = [
            "message": "update code wxcode",
            "content": base64String,
            "sha": sha,
        ]
        
        // 发送请求
        AF.request(url, method: .put, parameters: parameters, encoding: JSONEncoding.default, headers: [
            "Authorization": "Bearer " + (token ?? ""),
            "User-Agent": "PostmanRuntime/7.41.2",
        ])
        .responseDecodable(of: GitHubRes.self) { response in
            switch response.result {
            case .success:
                print("上传成功")
                uploadStatus = "上传成功"
            case .failure(let error):
                print("上传失败")
                uploadStatus = "上传失败: \(error.localizedDescription)"
            }
        }


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

相关文章:

  • GitHub的简单操作
  • 家教老师预约平台小程序系统开发方案
  • 海南省大数据发展中心:数据资产场景化评估案例手册(第二期)
  • B3842 [GESP202306 三级] 春游
  • 第R3周:RNN-心脏病预测
  • mysql 忘记root密码 无密码登录系统 配置文件怎么改?
  • 远场P2P穿越
  • Facebook元宇宙项目中的智能合约应用:提升虚拟空间的自治能力
  • 《探秘计算机视觉与深度学习:开启智能视觉新时代》
  • HTML——30.视频引入
  • Spring Boot 中的 classpath详解
  • 专业高程转换工具 | 海拔高度与椭球高度在线转换系统
  • PHP框架+gatewayworker实现在线1对1聊天--发送消息(6)
  • Elasticsearch:当混合搜索真正发挥作用时
  • 选择器(结构伪类选择器,伪元素选择器),PxCook软件,盒子模型
  • [CTF/网络安全] 攻防世界 warmup 解题详析
  • 达达求变这一年,即时零售江湖潮起两岸阔
  • vue2+echarts实现水球+外层动效
  • 无人机飞手培训机构大量新增,考取飞手证参军入伍还有优势吗?
  • PHP框架+gatewayworker实现在线1对1聊天--gatewayworker说明(2)
  • 怎么免费查询企业的行政监管信息?
  • 入门嵌入式(二)——中断
  • 设计模式 结构型 适配器模式(Adapter Pattern)与 常见技术框架应用 解析
  • CPO-SVMD分解 | Matlab实现CPO-SVMD豪猪算法优化逐次变分模态分解
  • 图像概念与分类
  • Linux下Shell编程之ps命令详解及示例