Xcode 10,Swift 4-将函数移动到单独的文件?

时间:2018-10-14 23:21:08

标签: swift xcode

我已经创建了我的第一个swift应用,并且想要稍微组织一下我的代码。 首先,我想将我的函数移到一个单独的文件中,称为functions.swift,但这会给我带来麻烦,出现以下错误:

Use of unresolved identifier 'myLabel'

我的示例代码:

import Cocoa

class ViewController: NSViewController {
    func myFunction(){
        myLabel.stringValue="Hello World"
    }

    @IBOutlet weak var myButton: NSButton!
    @IBOutlet weak var myLabel: NSTextField!
    @IBAction func myButton(_ sender: Any) {
        myFunction()
    }
    override func viewDidLoad() {
        // Do any additional setup after loading the view.
        super.viewDidLoad()
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }
}

我要移到单独文件的内容:

    func myFunction(){
        myLabel.stringValue="Hello World"
    }

该错误对我来说是“可以理解的”,但如何解决却不是。

在单独的文件中组织功能和其他内容然后包含或调用它们的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

创建全局“ functions.swift”不是组织代码的好方法。 myFunction是属于ViewController的方法。它不是自由功能(即不属于任何类型的功能),因此将其与“功能”组合在一起会非常混乱。

如果您的ViewController.swift变得笨拙,首先应询问它是否做得太多,并且需要创建另一种类型(而不仅仅是通用的“功能”文件)。但是,如果只需要稍微分解一下,正确的方法是为ViewController的这一部分创建一个文件作为扩展名,通常是在一个名称为Type+Section.swift的文件中,其中“类型“是类型(例如ViewController,“ Section”是扩展的类别(例如Drawing)。

extension ViewController {
    func myFunction(){
        myLabel.stringValue="Hello World"
    }
}

但是,通常,特别是如果您是初学者,很少有理由这样做。将类型拆分为多个文件比弄清楚事情更容易造成混乱。