Это:
public var cellIdentifier: String { return String(describing self) }
определяет вычисляемое свойство . Значение не сохраняется. Каждый раз, когда вы получаете доступ к cellIdentifier
, закрытие запускается и возвращает String
. Это только для чтения, потому что был предоставлен только получатель.
Это:
public var cellIdentifier: String = String(describing: self)
- это свойство хранимого значения , и оно доступно для чтения / записи.
Ошибка говорит вам, что вы не можете заменить свойство, имеющее возможности чтения / записи, на свойство, имеющее только возможности чтения.
Примечание: если вы инициализируете свойство значением, вы не можете получить доступ к self
, потому что self
не представляет экземпляр класса / структуры, пока объект не будет полностью инициализирован. Если вы сделали свойство lazy var
, вы могли бы использовать self
при инициализации, потому что тогда свойство будет инициализировано при первом обращении к нему.
Вы можете узнать больше о свойствах Swift здесь в Руководстве по языку Swift