Невозможно присвоить свойству 'selectionTime' - свойство только для получения - PullRequest
1 голос
/ 29 мая 2019

Я получаю эту ошибку, когда пытаюсь установить для наблюдения временной интервал.Не уверен, почему я могу установить свойство, я установил его таким образом в других местах

weatherReading?.observationTime = NSTimeIntervalSince1970

@objcMembers class WeatherThirdPartyReadings: NSObject  {

    private var _temperature: Double
    private var _speed: Double
    private var _direction: Double
    private var _observationTime: Double
    private var _isSummaryLoaded: Bool

    var temperature: Double {
        return _temperature
    }
    var speed: Double {
        return _speed
    }
    var direction: Double {
        return _direction
    }
    var observationTime: Double {
        return _observationTime
    }
    var isSummaryLoaded: Bool {
        return _isSummaryLoaded
    }

    init(temperature: Double, speed: Double, direction: Double, observationTime: Double, isSummaryLoaded: Bool) {
        self._temperature = temperature
        self._speed = speed
        self._direction = direction
        self._observationTime = observationTime
        self._isSummaryLoaded = isSummaryLoaded
    }
}

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Вам необходимо

var observationTime: Double { 
    set { 
        _observationTime = newValue
    }
    get{ 
        return _observationTime
    }
}

Так как

var observationTime: Double {
    return _observationTime
}

делает его доступным только для чтения, которое по умолчанию имеет реализация get


@objcMembers class WeatherThirdPartyReadings: NSObject  {

    var temperature: Double
    var speed: Double
    var direction: Double
    var observationTime: Double
    var isSummaryLoaded: Bool

    init(temperature: Double, speed: Double, direction: Double, observationTime: Double, isSummaryLoaded: Bool) {
        self.temperature = temperature
        self.speed = speed
        self.direction = direction
        self.observationTime = observationTime
        self.isSummaryLoaded = isSummaryLoaded
    }
}
1 голос
/ 29 мая 2019

Проблема в том, что когда вы используете этот синтаксис, вы говорите, что у публичного свойства есть только геттер, а никакой сеттер недоступен. Вам также необходимо создать установщик для свойства.

var observationTime: Double {
    get {
        return _observationTime
    }
    set {
        _observationTime = newValue
    }
}

Если вам явно не нужна вспомогательная переменная по какой-то другой причине, не указанной в вашем посте, вы можете просто объявить переменную следующим образом:

var observationTime: Double
...