Ленивая недвижимость в SwiftUI - PullRequest
0 голосов
/ 28 апреля 2020

Привет, мне нужна помощь в создании ленивого свойства.

У меня есть этот код:

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

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Вы можете использовать stati c вместо lazy.

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)")
    }
}

0 голосов
/ 28 апреля 2020

Вы не можете использовать lazy в представлении SwiftUI, если вы хотите, чтобы в этом конкретном случае c можно было использовать stati c, как в примере ниже

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 в связанный класс модели представления и использовать его из соответствующего экземпляра.

...