首页 > 解决方案 > 如何在同一个项目中使用来自其他 swift 文件(相同目标)的函数

问题描述

嘿,我在自己的 swift 文件中有 2 个类。我基本上这样做只是为了在我的 Viewcontroller 中获得更好的概览。不过,我需要访问数据或从我的视图 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
    }
}

标签: swiftfile

解决方案


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,所以你需要先创建一个instanceGraphen然后用它来调用它的实例方法,就像这样,

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

同样调用 other instance methodsof Graphen。假设filteredChart(values:)and multipleCharts()are instance methods,您可以像这样调用它们,

graphen.filteredChart(values: buffer2.map { Double($0) })
graphen.multipleCharts()

推荐阅读