赞
踩
最近的一个SwiftUI 项目需要从服务器获取可选语言列表然后通过表单的Picker进行选择,代码如下:
语言结构:
import Foundation
import SwiftUI
import HandyJSON
//语言
struct Language :Hashable, Codable,Identifiable, HandyJSON {
var id = UUID()
var name:String!
var code:String!
}
表单
//选择目标 @State var target:String = "" //所有可选语言 @State var languages:[Language] = [] Section{ Picker(selection: $target, label: HStack{ RoundedRectangle(cornerRadius: 8) .overlay( Image(systemName: "globe") .foregroundColor(.white) ) .frame(width: 40,height: 40,alignment: .center) .foregroundColor(.green) Text("Language") } ) { ForEach(languages) { language in Text(language.name).tag(language.code) } }.padding(.vertical) }
通过表单onAppear呈现时,发起网络请求,解析可选语言列表到动态数组 languages 中,Picker能马上显示可选列表,但不能进行选择,点击选择不会返回表单,图片如下(没有打勾)
按道理说,点击picker中的某一项之后,对应Text的tag的值会赋值到目标target 变量。
我通过打印临时变量的方式发现此时的Tag中的值不是String类型的,而是Optional类型,这下就容易解决了,如下把Tag中的值加一层转换:
ForEach(languages) { language in
Text(language.name).tag(String(language.code))
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。