我是swift的新手,正在创建一个带有两个视图的图形应用程序,其中一个文本字段用于输入数据,另一个用于显示数据。我在ViewController类中将数据作为两个双精度数组得到了,但是我无法将数据移动到UIView的类中,我想将它绘制到视图中,因为它不会继承数组。我尝试过访问器方法但没有改变任何东西。
这是包含xValues和yValues
的类getElementsByTagNameNS(namespace, tag)
这是我希望他们传递给的课程。我在分别将xCords和yCords初始化为ViewController.getXCord()和ViewController.getYCord()时收到错误。
class ViewController: UIViewController {
@IBOutlet var DataEntry: UITextView!
var xValues = Array<Double>()
var yValues = Array<Double>()
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
//the xValues and yValues arrays are filled when the view changes on the press of a button
}
public func getXCord() -> Array<Double>{
return xValues
}
public func getYCord() -> Array<Double>{
return yValues
}
}
答案 0 :(得分:2)
你这样做是完全相反的。
在MVC模式中,视图(您的GraphView
类)永远不应直接与控制器通信。相反,视图应使用委托和/或数据源与控制器通信。
您的观点应该有GraphViewDatasource
:
protocol GraphViewDatasource : class {
func xValues(inGraph: GraphView) -> [Double]
func yValues(inGraph: GraphView) -> [Double]
}
// in GraphView
weak var datasource: GraphViewDatasource?
func reloadData() {
guard let datasource = self.datasource else { return }
xValues = datasource.xValues(inGraph: self)
yValues = datasource.yValues(inGraph: self)
// redraw the graph...
}
您的控制器应实施GraphViewDatasource
:
class ViewController: UIViewController, GraphViewDatasource {
func xValues(inGraph: GraphView) -> [Double] { return self.xValues }
func yValues(inGraph: GraphView) -> [Double] { return self.yValues }
}
并将self
设置为图表视图的数据源:
let graph = GraphView(frame ...)
self.view.addSubView(graph)
graph.datasource = self
graph.reloadData()
答案 1 :(得分:0)
您需要将xCoords和yCoords从ViewController传递给GraphView。 首先,用空数组初始化xCoords和yCoords:
class GraphView: UIView{
var points: [Points] = []
var xCords: Array<Double> = []
var yCords: Array<Double> = []
var position = CGPoint(x: 0,y: 0)
}
比从ViewController传递它:
class ViewContoller: UIViewController {
@IBOutlet var graphView: GraphView!
override func viewDidLoad() {
super.viewDidLoad()
graphView.xCoords = self.xCoords
graphView.yCoords = self.yCoords
}
}