0

嗨,我需要帮助制作懒惰的财产。

我有这个代码:

lazy var dateFormat: DateFormatter =
{
    let formatter = DateFormatter()
    formatter.locale = NSLocale.current
    formatter.dateFormat = "dd/MM/YYYY hh:mm"
    return formatter
}()

并且在使用时Text(date, formatter: self.dateFormat)

我收到此错误Cannot use mutating getter on immutable value: 'self' is immutable

4

3 回答 3

1

您可以使用静态而不是惰性。

struct Formatter: View {

    var date = Date()

    private static var dateFormat: DateFormatter = {
        let formatter = DateFormatter()
        formatter.locale = NSLocale.current
        formatter.dateFormat = "dd/MM/YYYY hh:mm"
        return formatter
    }()

    var body: some View {
        Text("\(date, formatter: Self.dateFormat)")
    }
}

于 2020-04-28T09:18:27.497 回答
0

你不能lazy在 SwiftUI 视图中使用,如果你想在这种特定情况下可以使用静态,如下例所示

struct TestView: View {
    static var dateFormat: DateFormatter =
    {
        let formatter = DateFormatter()
        formatter.locale = NSLocale.current
        formatter.dateFormat = "dd/MM/YYYY hh:mm"
        return formatter
    }()

    // ... other code

    // use as TestView.dateFormat

作为替代,您可以lazy var dateFormat进入相关的视图模型类并从相应的实例中使用它。

于 2020-04-28T09:13:27.753 回答
0

关于在 SwiftUI 中使用日期格式化程序的答案没有错,但没有一个能正确处理本地化的日期格式。如果您不打算使用任何预定义的日期格式,您应该使用DateFormatter实例函数setLocalizedDateFormatFromTemplate(_ dateFormatTemplate: String)

这让你可以传入你想要的格式——并巧妙地应用该格式的正确本地化版本:你可以在 Swift Playground 中尝试一下:

在此处输入图像描述

您可以看到使用正确的语言环境来呈现日期字符串。

于 2020-05-20T13:36:48.107 回答