Невозможно использовать ленивую переменную в структуре в методе firstIndex массива - PullRequest
1 голос
/ 05 апреля 2019

Я видел пару вопросов, но не нашел решения и причины

Вот структура

struct MovementFormattedData {
   ... Other properties ...
   lazy var timeAsDate:Date?  = {
       return MovementFormattedData.getUTCDate(movementTime: movementTime)
    }()



  static func getUTCDate(movementTime:String?) -> Date? {
        // return date
     }
}

Теперь у меня есть массив

var movements :[MovementFormattedData] = []

КогдаЯ пытаюсь

  self?.movements.firstIndex(where: {$0.timeAsDate > Date() })

Я получаю

Невозможно использовать мутирующий получатель для неизменяемого значения: '$ 0' является неизменным

Я не изменяю $ 0в любом месте.Я просто захожу в собственность

Пожалуйста, помогите

Ответы [ 3 ]

1 голос
/ 05 апреля 2019

Я думаю, инициализация timeAsDate считается мутацией, поэтому ленивая переменная может оказаться не тем, что вам нужно.

Вместо этого вы можете попробовать вычисляемую переменную, если вам не нужно менять ее вручную.

var timeAsDate: Date? {
   return MovementFormattedData.getUTCDate(movementTime: movementTime)
}
0 голосов
/ 05 апреля 2019

Ленивое свойство изменяет геттер, и вы не можете использовать его с $ 0, потому что $ 0 является неизменным

см. Следующий блок кода

struct MovementFormattedData {
   ... Other properties ...
   var timeAsDate: Date? {
       return MovementFormattedData.getUTCDate(movementTime: movementTime)
    }

  static func getUTCDate(movementTime:String?) -> Date? {
        // return date
     }
}

var movements: [MovementFormattedData] = []

self?.movements.firstIndex(where: { $0.timeAsDate ?? Date() > Date() })
0 голосов
/ 05 апреля 2019

Нет необходимости использовать ленивый var

var timeAsDate: Date? {
    return MovementFormattedData.getUTCDate(movementTime: movementTime)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...