базовый сюжет быстрой версии barFillForPlotColor - PullRequest
0 голосов
/ 03 октября 2018

Добрый день всем вам;

Я недавно начал работать с CorePlot в своих проектах iOS и научился создавать гистограммы из моих данных (спасибо учебнику RayWenderlich).

Теперь, вместо того, чтобы использовать один цвет для всех баров, я хотел бы раскрасить их на основе их значений.Например, значения ниже 1,0 - красные, значения 1,0 - синие, а значения выше 1,0 - зеленые.

Я знаю, что это можно сделать, и я прочитал множество статей, в которых говорится об использовании - (обнуляемое CPTFill *) barFillForBarPlot: (ненулевой CPTBarPlot *) barPlot recordIndex: (NSUInteger) index функция.На самом деле я посмотрел пример colourBarChart в Примеры CorePlot - Галерея графиков и посмотрел, как они используют эту функцию.Проблема, с которой я сталкиваюсь, заключается в том, что я программирую на Swift, и мне нужна версия Swift для этой функции, которую я могу использовать, или объяснение того, как я могу использовать эту версию в своем коде Swift.

Любая помощьчто вы можете предоставить, очень ценится.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Ах, я вижу;вызов функции конвертируется в Swift.Основываясь на этой информации, я смог взглянуть на некоторые вызовы Swift, которые я уже использовал из CorePlot, и связанный код Objective C, чтобы выяснить, как его преобразовать.

Вот что я придумал:

   // original function
-(nullable CPTFill *)barFillForBarPlot:(nonnull CPTBarPlot *)barPlot recordIndex:(NSUInteger)index
{
   return CPTFill(color: .red()) // or whatever color you want based on the data value
}
   // Swift version of the function (updated 2018/Oct(10)/07)
func barFill(for barPlot: CPTBarPlot, record index: UInt ) -> CPTFill?
{
   return CPTFill(color: .red()) // or whatever color you want based on the data value
}

Спасибо, Эрик.

0 голосов
/ 04 октября 2018

Компилятор Swift автоматически переименовывает методы Objective-C, чтобы сделать их более «быстрыми».Попробуйте это в источнике данных бара:

func barFill(for plot: CPTBarPlot, record: UInt) -> CPTFill?
{
    return CPTFill(color: .red()) // or whatever color you want based on the data value
}
...