单独 swift 文件中的 UILabel 函数

UILabel in function in separate swift file

我想知道如何使用 UILabel

@IBOutlet weak var MyLabel : UILabel!

在函数中,在另一个 swift 文件中。

"SecondSwift file"

func MyFunc {
print(MyLabel.text = "")
}

现在我遇到了无法在单独的 swift 文件中使用我的 UILabel 的问题

我有很多功能,如果我需要在那里制作我的所有功能,我的 MainViewController 会变得混乱。

所以我想知道是否可以在另一个 swift 文件的函数中使用 UILabel 以便我以后可以使用它

你的 UILabel 属性 属于某个 class 的实例,所以为了访问标签,你需要调用那个 class 上的方法,或者传递实例class 到你的 func.

func myFunc(mainVC: MainViewController) { print(mainVC.MyLabel.text) }

如果目的只是将与 MainViewController 相关的源代码拆分为多个源文件,您可以在单独的文件中创建 class MainViewController 的扩展.swift 源文件。

考虑以下简单示例,包含两个源文件,MainViewController.swiftMainViewControllerExtensions.swift

/* Source file: MainViewController.swift */
import UIKit

class MainViewController: UIViewController {

    @IBOutlet weak var myLabel: UILabel!
    private var myPrivateInt = 1

    // ...

    override func viewDidLoad() {
        super.viewDidLoad()

        myLabel.text = "foo"

        /* member methods defined in separate source file      */
        foo()               /* set 'myLabel' text to "foobar"  */
        printLabel(myLabel) /* print text of UILabel argument; 
                               here, prints "foobar"           */
    }
}

/* Source file: MainViewControllerExtensions.swift */
extension MainViewController {

    func foo() {
        myLabel.text = "foobar"
        // myPrivateInt <-- not accessible in this scope
    }

    func printLabel(label: UILabel) {
        print(label.text ?? "")
    }
}

在上面的简单示例中加载视图后,您的标签将包含文本 "foobar"

但是请注意,单独源文件中的扩展无法访问主文件中的 private 属性和方法。然而,swift 中的大多数实体的默认访问级别为 internal;您可以从单独的源文件访问内部属性和方法,如上例所示。因此,除非您明确定义 properties/methods 的私有访问级别,否则您将能够在 separate-source-file 扩展中访问它们。

有关 Swift 中访问级别的更多信息,请参阅 Language Guide - Access Control