如何将一个variables从一个类传递给另一个?

目的

我需要我的应用程序将一个variablesmyVariable的值从一个firstClassfirstClass给另一个只有当这个variables改变了它的值的时候。

为此,我想使用willSet属性。 虽然在Swift中,variables声明之后不能使用它。

 class firstClass: NSObject { var myVariable = 0 func myFunction { myVariable = 5 } } class secondClass: NSObject { var otherClass = firstClass() // How do I retrive the value of the variable right after its value changed? } 

我也想添加一个NSNotification ,但是这并没有帮助,因为它没有传递一个值。 NSNotification仅提醒其更改。

  let myVariableNotification = NSNotification(name: "myVariableNotification", object: nil) class firstClass: NSObject { var myVariable = 0 func myFunction { myVariable = 5 notificationCenter.postNotification(myVariableNotification) } } class secondClass: NSObject { var otherClass = firstClass() NSNotificationCenter.defaultCenter().addObserverForName("myVariableNotification", object: nil, queue: NSOperationQueue.mainQueue() usingBlock: { notification in println("The variable has been updated!") }) } 

一旦这个variables改变了它的值,我似乎无法传递一个variables。 我怎样才能做到这一点?

你应该使用委托协议。 有关更多信息,请查看此文档。

import语句之后的secondClass设置一个protocol ,如下所示:

 protocol InformingDelegate { func valueChanged() -> CGFloat } 

在同一个secondClass里面创build一个delegatevariables(有些build议它应该被标记为weak ):

 var delegate: InformingDelegate? 

然后,创build一些你将访问更改的值的方法。 您可以将其value为例如:

 func callFromOtherClass() { value = self.delegate?.valueChanged() } 

这是第二secondClass 。 现在到第一firstClass
在这里你只需要在类定义之后添加InformingDelegate来符合协议,就像这样:

 class firstClass: UIViewController, InformingDelegate { ... } 

然后,通知编译器,你将通过创build它的实例成为另一个类的委托,并将自己设置为委托:

 var secondVC : secondClass = secondClass() secondClass.delegate = self secondClass.callFromOtherClass() // This will call the method in the secondClass // which will then ask its delegate to trigger a method valueChanged() - // Who is the delegate? Well, your firstClass, so you better implement // this method! 

最后一件事情是通过实现其方法实际上符合协议:

 func valueChanged() -> CGFloat { return myVariable // which is 5 in your case (value taken from a question) } 

这会将myVariable值(本例中为5) value给另一个类中的value

编程的最好方法是使用NSNotification。 在你的第二个viewcontroller中添加一个观察者来监听这个variables值的变化。 在第一个视图控制器中,只要这个variables改变了值,就向第二个视图控制器正在监听的观察者发送一个通知。

您将不得不使用“userInfo”变体并传递一个包含myVariable值的NSDictionary对象:

 NSDictionary* userInfo = @{@"myVariable": @(myVariable)}; NSNotificationCenter *notifying = [NSNotificationCenter defaultCenter]; [notifying postNotificationName:@"myVariableNotification" object:self userInfo:userInfo]; 

在你的第二个viewcontroler调用你的通知中心方法设置通知及其调用方法如下:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeInValue:) name:@"myVariableNotification" object:nil]; 

调用方法:

 -(void) changeInValue:(NSNotification*)notification { if ([notification.name isEqualToString:@"myVariableNotification"]) { NSDictionary* userInfo = notification.userInfo; NSNumber* myVariable = (NSNumber*)userInfo[@"myVariable"]; NSLog (@"Successfully received test notification! %i", myVariable.intValue); } }