UILabel在单独的swift文件

时间:2016-01-20 09:13:05

标签: swift iboutlet

我想知道如何使用UILabel

@IBOutlet weak var MyLabel : UILabel!

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

"SecondSwift file"

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

现在我遇到的问题是我无法在单独的快速文件中使用我的UILabel

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

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

2 个答案:

答案 0 :(得分:3)

如果目的是简单地将与MainViewController相关的源代码拆分为多个源文件,则可以在单独的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"

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

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

答案 1 :(得分:0)

您的UILabel属性属于某个类的实例,因此为了访问该标签,您需要在该类上调用一个方法,或者将该类的实例传递给您的func。

{{1}}