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?
}
在这个例子中,age
和 email
是可选字段,可以为 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)"
}
}