Как пропустить возвращаемое значение в функции, где ожидается значение - PullRequest
0 голосов
/ 13 ноября 2018

Я использую эту функцию:

let values = (0..<self.data.count).map { (i) -> ChartDataEntry in
    let x = valueDate!.timeIntervalSince(startDate)
    if let a = (self.data[i]["labelvalue"] as? NSString)?.doubleValue{
        return ChartDataEntry(x: Double(x), y: a)
    } else {
        return nil
    }
}

Это вызывает эту ошибку:

Ноль несовместим с типом возвращаемого значения 'ChartDataEntry'

Как я могу пропустить цикл, не возвращая никакого значения, и продолжить следующую проверку?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Основываясь на правильном ответе Aakash на использование compactMap, это более быстрая (и более эффективная) версия

  • x - это константа, поэтому создайте ее один раз за пределами замыкания.
  • TimeInterval - псевдоним типа Double, Double(x) является избыточным.
  • (Compact) отображает массив data, а не его индексы.
  • Избегайте ненужных приведений мостов.

let x = valueDate!.timeIntervalSince(startDate)
let values = self.data.compactMap { (item) -> ChartDataEntry? in
    guard let d = item["labelvalue"] as? String, let a = Double(d) else { return nil }
    return ChartDataEntry(x: x, y: a)
}
0 голосов
/ 13 ноября 2018
let values = (0..<self.data.count).compactMap { (i) -> ChartDataEntry? in
            let x = valueDate!.timeIntervalSince(startDate)
            if let a = (self.data[i]["labelvalue"] as? NSString)?.doubleValue{
                return ChartDataEntry(x: Double(x), y: a)
            }

            return nil
        }

Замените ваш код этим.

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

Youможете узнать больше о compactMap здесь

...