Отметить закрывающий элемент изменяемым Swift - PullRequest
0 голосов
/ 14 марта 2019

У меня есть 2 структуры, первая:

struct LineData {

    init (name: String,
          colorValue: String,
          values: [Int]){
        self.name = name
        self.colorValue = colorValue
        self.values = values
    }

    private var cachedMaxValue: Int? = nil
    let name: String
    let colorValue: String
    let values: [Int]

    // describe max value for Y axis for specific Line
    mutating func maxValue() -> Int{
        if let cached = cachedMaxValue {
            return cached
        }
        self.cachedMaxValue = values.max()
        return cachedMaxValue ?? 0
    }
}

Вторая имеет массив LineData структур:

struct CharData {

    init(xAxis: XAxis,
         lines: [LineData]){
        self.xAxis = xAxis
        self.lines = lines
    }

    private var cachedMaxValue: Int? = nil

    var xAxis: XAxis
    var lines: [LineData]

    // describe max value for Y axis among lines
    func maxValue() -> Int{

        var maxValues: [Int] = []
        lines.forEach{it in
            maxValues.append(it.maxValue())
        }

        return 0
    }
}

Код выше не скомпилирован, из-за ошибки метода maxValues для структуры CharData.Там написано Cannot use mutating member on immutable value: 'it' is a 'let' constant

Что мне нужно, так это перебрать массив строк, и среди них максимальное значение найти большее значение.

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Поскольку строки - это обычный массив, как насчет простого:

    for i in 0..<lines.count {
        maxValues.append(lines[i].maxValue())
    }

возможно не совсем как Swifty, но ничего не копируется. Оптимизатор должен дать вам ту же производительность, что и forEach.

1 голос
/ 14 марта 2019

Это параметр / объект it в forEach, который является неизменным.Также как ошибка говорит: «это пусть».Вероятно, вы могли бы сделать что-то вроде этого:

lines.forEach { it in
    var mutableIt = it
    maxValues.append(mutableIt.maxValue())
}

Следует отметить, что это создаст изменчивую копию экземпляра структуры "it".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...