【发布时间】:2021-09-25 11:36:28
【问题描述】:
我在列表中有一个复选框,单击复选框我想创建一个这样的 Json 数组
{"nurseryData":[{"nurseryCode":"","SSOId":""},.....]} and so on
我尝试了各种方法,但无法在单击复选框时附加参数。
请提出一种方法来实现它我是 swift ui 的初学者。
import SwiftUI
import Alamofire
struct AddNurseryCard: View {
@State private var checked = false
let models : AddNurseryModels.Data
var data: [String: Any] = [
"nurseryData": [String : Any]()
]
var body: some View {
HStack{
Image("nursery")
Divider()
VStack{
if((models.isUrban!) != 0)
{
Text(models.nurseryName! + " (U)")
}else{
Text(models.nurseryName! + " (R)")
}
Text(models.rANGE_NAME!)
if((models.isActiveForGGAY!) != 0)
{
Text("Is Active For GGAY : Yes")
}
else{
Text("Is Active For GGAY : NO")
}
}
CheckBoxView(checked: $checked).onAppear(){
if((models.isActiveForGGAY) != 0)
{
checked = true
}
else{
checked = false
}
}.onChange(of: checked, perform: { value in
if(checked)
{
let result = UserDefaults.standard.value(forKey: "profile")
let profile = ProfileModels(dict: result as! [String : Any])
let ssoId = (profile.data?[0].ssoid ?? "") as String
let nurseryCode = models.nurseryCode!
var existingItems = data["nurseryCode"] as? [[String: Any]] ?? [[String: Any]]()
var param = ["ssoId":ssoId,"nurseryCode":nurseryCode]
param.merge(dict: param)
print()
existingItems.append(param)
print(existingItems)
addNursery(params: param)
}
})
}
Divider()
}
func getArray(params:[[String: Any]]) -> [[String: Any]]
{
return params
}
func getChecked() -> Bool
{
return checked
}
func getNurseryCode() -> String
{
return models.nurseryCode!
}
func addNursery(params :[String:Any])
{
let url = Constants.init().devUrl + Api.init().addNursery
let headers : HTTPHeaders = HTTPHeaders(["ApiKey" : Constants.init().apiKey])
AF.request(url,method: .post,parameters: params, encoding:JSONEncoding.default, headers: headers).responseJSON { response in
switch response.result{
case .failure(let error):
print(error)
case .success(let json):
print(json)
}
}
}
}
struct AddNurseryCard_Previews: PreviewProvider {
static var previews: some View {
AddNurseryCard(models: AddNurseryModels.dat)
}
}
extension Dictionary {
mutating func merge(dict: [Key: Value]){
for (k, v) in dict {
updateValue(v, forKey: k)
}
}
}
【问题讨论】:
-
可能不相关,但您应该考虑将大部分逻辑移至单独的类(视图模型),而不是在视图中执行所有操作。关注点分离。
-
您可能还想考虑使用 SwiftyJSON:github.com/SwiftyJSON/SwiftyJSON,它更容易使用。
-
请解释为什么“in swift UI”很重要。我强烈建议您将创建 JSON 的尝试转移到单独的函数中。 JSON 应该只用于传输或存储/加载数据。
-
Tromgy:无需使用第三方库,Swift 可以非常轻松地处理 JSON。
-
为什么要创建json?创建后你想用它做什么?
标签: swift swiftui swiftui-list