簡體   English   中英

快速在類之間移動數據4

[英]moving data between classes in swift 4

我是新手,現在正在制作一個具有兩個視圖的繪圖應用程序,其中一個具有文本字段來輸入數據,另一個具有顯示數據的視圖。 我在ViewController類中將數據作為兩個double數組來獲取,但是我無法將數據移至我要繪制到視圖中的UIView類,因為它不繼承數組。 我已經嘗試了訪問器方法,但是並沒有改變任何東西。

這是包含xValues和yValues的類

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
    }

}

這是我希望他們上的課。 將xCords和yCords分別初始化為ViewController.getXCord()和ViewController.getYCord()時出現錯誤。

class GraphView: UIView{

    var points: [Points] = []
    var xCords: Array<Double> = ViewController.getXCord()
    var yCords: Array<Double> = ViewController.getYCord()
    var position = CGPoint(x: 0,y: 0)

}

您正在以完全相反的方式執行此操作。

在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()

您需要將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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM