Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: Cannot assign to '...' in 'self'

I have this code

import UIKit

class SliderControllerView: UIView{
    private let type: ControlType!
    private let label: UILabel!
    private let slider: UISlider!
    private weak var delegate: SliderControllerDelegate?

    private let defaults: SliderDefaults!

    convenience init(type: ControlType, defaults: SliderDefaults, delegate: SliderControllerDelegate?) {

        self.init()

        self.type = type
        self.delegate = delegate
        self.defaults = defaults

        setTranslatesAutoresizingMaskIntoConstraints(false)

        label = UILabel()
        configureLabel()

        slider = UISlider()
        configureSlider(slider)

        SliderDefaults.set(slider, defaults: defaults)

        if let valueFromDetauls = userDefaultsValue {
            slider.value = Float(valueFromDetauls)
        }

        saveValueInUserDefaults()
        updateLabel()
    }

Error messages:

  1. Cannot assign to 'type' in 'self'
  2. Cannot assign to 'defaults' in 'self'
  3. Cannot assign to 'label' in 'self'
  4. Cannot assign to 'slider' in 'self'

What me do? Thanks!


2 Answers

I made a couple of modifications to the code so it would compile although it does change the meaning some.

class SliderControllerView: UIView {

    // Converted "let" to "var"
    private var type: ControlType!
    private var label: UILabel!
    private var slider: UISlider!
    private weak var delegate: SliderControllerDelegate?

    private var defaults: SliderDefaults!

    // Added frame to init
    convenience init(frame: CGRect, type: ControlType, defaults: SliderDefaults, delegate: SliderControllerDelegate?) {

        // Call designated init(frame: CGRect) for UIView
        self.init(frame: frame)
        self.type = type
        self.delegate = delegate
        self.defaults = defaults

        setTranslatesAutoresizingMaskIntoConstraints(false)

        label = UILabel()
        configureLabel()

        slider = UISlider()
        configureSlider(slider)

        SliderDefaults.set(slider, defaults: defaults)

        if let valueFromDetauls = userDefaultsValue {
            slider.value = Float(valueFromDetauls)
        }

        saveValueInUserDefaults()
        updateLabel()
}
like image 70
joekim Avatar answered May 23 '26 07:05

joekim


You can not set the value of a let property in swift, so please make them as var properties.

like image 30
jishnu bala Avatar answered May 23 '26 07:05

jishnu bala



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!