SwiftUI大大简化了写代码的复杂度。写iOS的时候,Picker虽然算不上多难,但代码还是比较繁琐。如果要改变默认的样式,或者把类似的东西迁移到macOS的话,那复杂度就倍增了。
SwiftUI的出现极大简化了这个繁琐的工作。不过SwiftUI也有一些奇怪的行为。比如选中的选项显示不出来。
一个简单的例子。
let items = ["A", "B", "C"]
@State var selected: String = ""
var body: some View {
Picker("", selection: $selected) {
ForEach(items, id: \.self) { item in
Text(item)
.tag(item)
}
}
.padding()
}
这样Picker就能正常显示,也能正常选择。
但如果selected变成了Optional<String>类型的话,整个行为就变得很怪异。而这并没有任何异常提示,代码也能正常运行。显示出来的Picker可以选择,但不会把选择的项目显示出来。