Как использовать функции из других swift-файлов (той же цели) в том же проекте - PullRequest
0 голосов
/ 05 июня 2019

Эй, у меня есть 2 класса в каждом файле swift. Я делаю это в основном только для лучшего обзора моего Viewcontroller. Тем не менее, мне нужно получить доступ к данным или вызвать функцию из других файлов в моем файле view controller.swift. Он находится в той же цели, поэтому мне не нужно импортировать его в файл контроллера представления, верно?

Если я переопределяю func viewDidLoad (), я получаю исключение, поэтому я думаю, что мне разрешено делать это только один раз (-> в моем viewController.swift)

// ViewController.swift

class ViewController: UIViewController{


    @IBOutlet weak var xMotion: UILabel!
    @IBOutlet weak var yMotion: UILabel!
    @IBOutlet weak var zMotion: UILabel!

    @IBOutlet weak var lineChartView: LineChartView!
    @IBOutlet weak var lineChartView2: LineChartView!


override func viewDidLoad() {
    super.viewDidLoad()

       timebuffer.append(Double(ts1))
       colors.append(UIColor.red)

       Graphen.customizeChart(values: buffer1.map { Double($0) })
       Graphen.filteredChart(values: buffer2.map { Double($0) })
       Graphen.multipleCharts()
}

// Graphen.swift

class Graphen : ViewController
{

    //creates Plot with specific numbers/data
    func customizeChart(values: [Double]){
        var dataEntries: [ChartDataEntry] = []
        for i in 0..<buffer1.count{//dataPoints.count
            let dataEntry = ChartDataEntry(x: Double(i), y: values[i])
            dataEntries.append(dataEntry) }
        lineChartDataSet = LineChartDataSet(entries: dataEntries, label: nil)
        lineChartDataSet.circleRadius = 0.5
        let lineChartData = LineChartData(dataSet: lineChartDataSet)
        self.lineChartView.data = lineChartData
    }
}

1 Ответ

1 голос
/ 05 июня 2019

viewDidLoad() является lifecycle method из UIViewController's instance. Таким образом, оно может быть overridden в каждом UIViewCiontroller subclass, т.е.

class ViewController: UIViewController{
    override func viewDidLoad() {
        super.viewDidLoad()
        //your code here...
    }
}


class Graphen : ViewController
{
    override func viewDidLoad() {
        super.viewDidLoad()
        //your code here...
    }
}

Теперь вам не нужно импортировать file/class, если они находятся в одном и том же target.

Теперь, поскольку метод Graphen's customizeChart(values:) является instance method, вам необходимо сначала создать instance из Graphen, а затем использовать его для вызова методов его экземпляра, например,

let graphen = Graphen()
graphen.customizeChart(values: buffer1.map { Double($0) })

Аналогичным образом позвоните другим instance methods из Graphen. Предполагая, что filteredChart(values:) и multipleCharts() также instance methods, вы можете вызвать их как,

graphen.filteredChart(values: buffer2.map { Double($0) })
graphen.multipleCharts()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...