如何从不同的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
提前致谢!
【问题讨论】:
所有iboutlet
s 将为零,直到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文件访问一个类中的所有对象的主要内容,如果未能解决你的问题,请参考以下文章
从 Spring 访问普通 Java 类中的 HttpServletRequest 对象
无法访问扩展 Objective-C 类的 Swift 类中的私有变量
在组合项目中从Swift类访问Objective-C类中的singleton sharedInstance