如何从不同的swift文件访问一个类中的所有对象

Posted

技术标签:

【中文标题】如何从不同的swift文件访问一个类中的所有对象【英文标题】:How to access all objects in one class from a different swift file 【发布时间】:2015-09-01 07:28:34 【问题描述】:

我正在尝试从不同的 swift 文件和类中更改一些 IBOutlets 的属性。例如:在 B 类(UIView 类型)中运行函数来更改 A 类(UIViewController 类型)中 IBOutlet 的 alpha。我尝试了许多不同的方式来访问它们(扩展、超类),但我仍然得到这些网点的 nil 值。我知道这是因为视图已分配但未加载,但我找不到正确存储和访问“A”类插座以避免这种情况的方法。这是我的“B”类代码:

 let mainView = MainViewController()  //Code in B
  var changeAlpha = mainView.changeText() //Code in B

func changeAlpha()                //Code in class MainViewController
    self.hotLabel.alpha = 0

提前致谢!

【问题讨论】:

所有iboutlets 将为零,直到UIViewController 出现在某个地方。 iBoutlet 在调用 viewDidLoad 时填充。 你应该在你的MainViewController中保存一个值,比如hotLabelAlpha,并在呈现之前设置它,比如mainView.hotLabelAlpha = 0,当你的ViewController的viewDidLoad被调用时,你应该调用self.hotLabel.alpha = hotLabelAlpha . 好的,谢谢! 【参考方案1】:

不要再尝试分配MainViewController

尝试访问现有的MainViewController

var parentResponder: UIResponder? = self
        while parentResponder != nil 
            parentResponder = parentResponder!.nextResponder()
            if let mainView = parentResponder as? MainViewController 
                var changeAlpha = mainView.changeText()
            
        

当您尝试创建 MainViewController 类的对象(其中已经包含您的数据)时,您之前存储的值将无法访问,因为这两个类对象的引用将不同

您必须将现有的 MainViewController 类传递给 B 类或尝试访问现有的 MainViewController 或实现消息传递概念。

解决此类问题的唯一方法是,在编写代码之前尝试研究 OOPS 的基本概念(尤其是对象生命周期、分配等)。

【讨论】:

谢谢,这正是我想要的! 我已经为你添加了更多细节。

以上是关于如何从不同的swift文件访问一个类中的所有对象的主要内容,如果未能解决你的问题,请参考以下文章

Swift无法使用类型(实例)访问类中的静态变量

从 Spring 访问普通 Java 类中的 HttpServletRequest 对象

无法访问扩展 Objective-C 类的 Swift 类中的私有变量

在组合项目中从Swift类访问Objective-C类中的singleton sharedInstance

如何从 Swift 类中检索目标 C 类中的 Userdefault?

从 Swift Playground 中的不同页面访问变量