我是一名新手程序员,最近开始学习 Swift。
我正在 Swift 中制作一个项目,我的目的是在引入参数的同一视图中绘制用户引入的信号函数(使用由 PNLineChart 类控制的子视图)。
事实上,我使用 CocoaPods 安装了 PNChart 库,并使用 Objective C 标头的桥接标头。问题是,在 ObjC 中使用类和方法的方法是将它们“翻译”为 Swift 语法。我发现 PNChart 有作者制作的 Swift 实现,但 Pods 不提供(如果有人知道如何将它们放入我的项目中,也会很有帮助)。
好吧,作者在其 wiki 中给出的绘制数组图的 ObjC 代码如下:
#import "PNChart.h"
//For Line Chart
PNLineChart * lineChart = [[PNLineChart alloc] initWithFrame:CGRectMake(0, 135.0, SCREEN_WIDTH, 200.0)];
[lineChart setXLabels:@[@"SEP 1",@"SEP 2",@"SEP 3",@"SEP 4",@"SEP 5"]];
// Line Chart No.1
NSArray * data01Array = @[@60.1, @160.1, @126.4, @262.2, @186.2];
PNLineChartData *data01 = [PNLineChartData new];
data01.color = PNFreshGreen;
data01.itemCount = lineChart.xLabels.count;
data01.getData = ^(NSUInteger index) {
CGFloat yValue = [data01Array[index] floatValue];
return [PNLineChartDataItem dataItemWithY:yValue];
};
// Line Chart No.2
NSArray * data02Array = @[@20.1, @180.1, @26.4, @202.2, @126.2];
PNLineChartData *data02 = [PNLineChartData new];
data02.color = PNTwitterColor;
data02.itemCount = lineChart.xLabels.count;
data02.getData = ^(NSUInteger index) {
CGFloat yValue = [data02Array[index] floatValue];
return [PNLineChartDataItem dataItemWithY:yValue];
};
lineChart.chartData = @[data01, data02];
[lineChart strokeChart];
所以我尝试将其转换为 Swift,其中:
- 输入信号:UITextField! -> 将是用户介绍数学函数的文本字段(仍在开发中)
- 其他 IBOutlet -> 设置功能限制和全局图表限制的参数
- 输入SignalLineChart:PNLineChart! -> 将子View连接到ViewController
- initSignalExample -> 用于测试绘图的初始数组
- signalObtainedValues -> PNLineChartData 类型的声明
在 viewDidLoad() 函数内,我启动一个初始图表来测试它是否在视图中工作。当我尝试使用 PNLineChartData 类中定义的方法 getData() 时,问题就出现了,但我实际上无法将其转换为正确的 Swift 代码。
我的理解是 getData 有一个名为 index 的 UInteger 作为输入(我认为它会选择单个数据,但我没有看到它在任何地方声明:-/),并且作为输出它返回一个 PNLineChartDataItem()。正如我在 ObjC 代码中看到的,执行此操作的方法有点类似于 PNLineChartDataItem(y: CGFloat),所以我想我可以执行下面向您展示的代码:
import UIKit
class ViewController: UIViewController, PNChartDelegate{
@IBOutlet weak var inputSignal: UITextField!
@IBOutlet weak var initialTimeInputSignal: UITextField!
@IBOutlet weak var finalTimeInputSignal: UITextField!
@IBOutlet weak var initialGlobalTime: UITextField!
@IBOutlet weak var finalGlobalTime: UITextField!
@IBOutlet weak var inputSignalLineChart: PNLineChart!
let screenWidth = UIScreen.mainScreen().bounds.size.width
let screenHeight = UIScreen.mainScreen().bounds.size.height
let initSignalExample = [0.0, 1.0, 1.0, 1.0, 0.0]
let signalObtainedValues: PNLineChartData!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
view.backgroundColor = UIColor.cyanColor()
inputSignalLineChart.delegate = self
inputSignalLineChart.frame = CGRectMake(0, 135.0, screenWidth, screenHeight)
inputSignalLineChart.backgroundColor = UIColor.whiteColor()
inputSignalLineChart.setXLabels(["0","1","2","3","4"], withWidth: 1)
//signalObtainedValues.color = UIColor.greenColor()
//signalObtainedValues.itemCount = UInt(inputSignalLineChart.xLabels.count)
signalObtainedValues.getData(UInt(index)) = { PNLineChartDataItem(y: CGFloat(initSignalExample[index]))
}
//inputSignalLineChart.chartData = [signalObtainedValues]
inputSignalLineChart.strokeChart()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
尝试和尝试我只得到错误:无法分配给该表达式的结果,在 getData() 行中。所以我认为这是我用 Swift 编写的代码的语法。有谁知道如何执行此操作并在子视图中正确绘制图表?任何答案或有用的提示将不胜感激。谢谢你!