我想知道如何使用UILabel
@IBOutlet weak var MyLabel : UILabel!
在一个函数中,在另一个swift文件中。
"SecondSwift file"
func MyFunc {
print(MyLabel.text = "")
}
现在我遇到的问题是我无法在单独的快速文件中使用我的UILabel
我有很多功能,如果我需要在那里完成所有功能,MainViewController
会变得混乱。
所以我想知道是否可以在另一个swift文件中的函数中使用UILabel
,以便稍后可以使用它
答案 0 :(得分:3)
如果目的是简单地将与MainViewController
相关的源代码拆分为多个源文件,则可以在单独的MainViewController
来源中为您的班级.swift
创建扩展程序文件。
考虑以下简单示例,包含两个源文件MainViewController.swift
和MainViewControllerExtensions.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}}