簡體   English   中英

SwiftUI TextField 日期綁定

[英]SwiftUI TextField Date Binding

嗯。 我對這些綁定做得不是很好。

struct RecordForm: View
{
    @State var record: Record
    var body: some View
    {
        TextField("date", text: Binding($record.recordDate!)))
    }
}

我想將此日期轉換為字符串。 在常規 Swift 中,我只會調用我的擴展程序

record.recordDate.mmmyyy()

但我找不到正確的語法,甚至找不到進行轉換的正確位置。

如果我嘗試將代碼放入正文或結構中,我只會收到一堆錯誤。

有沒有關於這個主題的易於閱讀的文檔?

九塊石頭的答案效果很好,盡管我不得不稍微調整代碼才能讓它與 NSManagedObject 一起工作:

struct RecordDate: View
{
    @State var record: Record //NSManagedObject
    var body: some View {
        let bind = Binding<String>(
            get: {self.$record.recordDate.wrappedValue!.dateString()},
            set: {self.$record.recordDate.wrappedValue = dateFromString($0)}
        )
        return HStack {
            Text("Date:")
            TextField("date", text: bind)
        }
    }
}

//dateString is a date extension that returns a date as a string
//dateFromString is a function that returns a string from a date

文檔很難找到,而且 Apple 真的很爛。

嘗試創建自定義綁定。

extension Date {
  func mmyyy() -> String { "blah" }
  static func yyymm(val: String) -> Date { Date() }
}

struct RecordForm: View {
  struct Record {
    var recordDate: Date
  }

  @State var record = Record(recordDate: Date())
  var body: some View {
    let bind = Binding(
      get: { self.record.recordDate.mmyyy() },
      set: { self.record.recordDate = Date.yyymm(val: $0)}
    )
    return VStack {
      TextField("date", text: bind)
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM