[英]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.