在swift 4中的类之间移动数据

时间:2018-02-09 06:37:49

标签: ios swift inheritance

我是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
    }

}

2 个答案:

答案 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
    }
}