我正在尝试从SwiftUI中的DatePickerView返回@Binding:String值。
[有人可以告诉我格式化代码应该去哪里吗?。.到目前为止,我已经在.onAppear中尝试过,它会生成一个初始值,但不会更新(NS)...也在主体和.onDisappear中尝试过..但是什么也没有返回...
struct DateView: View {
@Binding var dateString: String
@State var selectedDate: Date = Date()
let formatter = DateFormatter()
var body: some View {
formatter.dateFormat = "d MMM y"
dateString = formatter.string(from: selectedDate)
print(self.dateString)
return DatePicker(selection: $selectedDate, displayedComponents: .date) {
Text("Select a date")
}.labelsHidden()
}
}
尝试
struct DateView: View {
@Binding var dateString: String
@State var selectedDate: Date = Date()
let formatter = DateFormatter()
var body: some View {
DatePicker(selection: $selectedDate, displayedComponents: .date) {
Text("Select a date")
}.labelsHidden()
.onAppear(){
self.formatter.dateFormat = "d MMM y"
self.dateString = self.formatter.string(from: self.selectedDate)
print(self.dateString)
}
}
}
[可能的方法是使用Binding
包装器,在其中可以进行副作用计算/作用的设置,如下所示
var body: some View {
return DatePicker(selection: Binding<Date>(
get:{ self.selectedDate },
set: { date in
self.formatter.dateFormat = "d MMM y"
self.dateString = self.formatter.string(from: date)
print(self.dateString)
self.selectedDate = date
}), displayedComponents: .date) {
Text("Select a date")
}.labelsHidden()
}
这里是代码。
struct ContentView: View {
@ObservedObject var value = SelectionChnage()
let formatter = DateFormatter()
var body: some View {
DatePicker(selection: $value.selection, displayedComponents: .date) {
Text("Select a date")
}.labelsHidden()
}
}
final class SelectionChnage: ObservableObject {
var selection: Date = Date() {
didSet {
date_formate(slectedate: selection)
}
}
}
func date_formate(slectedate: Date) {
let formatter = DateFormatter()
formatter.dateFormat = "d MMM y"
let dateString = formatter.string(from: slectedate)
print(dateString)
}