SwiftUI - @Binding: строка из DatePickerView - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь получить значение @Binding: String, возвращаемое из DatePickerView в SwiftUI.

Может кто-нибудь сказать мне, где код форматирования должен go? .. Я до сих пор пробовал в .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)
            }
        }
    }

1 Ответ

0 голосов
/ 17 января 2020

вот код.

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)

}

...