Xav*_*ero 3 iphone delegates objective-c ios
我有2个类,比如A类和B类.B类是在A类中创建的.我在A类中有一个方法,需要在A类和B类中执行.在A类中调用方法本身很好.但我不确定在类B中调用该方法.我已经尝试将该方法声明为静态,但由于我不能在静态方法中使用实例变量,我认为使用委托会是一个好主意.由于我来自C#背景,我不确定在Objective C中使用它.从概念上讲,我已经在C#中实现了我需要的内容,如下所示.只是想知道在Objective C中它的等价物是什么.
class A
{
public A()
{
B myclass = new B(() => calculate());
}
public void calculate()
{
// todo
}
}
class B
{
public B(Action calculate)
{
calculate();
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用协议来完成此操作.
我正好在研究时碰巧看过这篇文章.这是一个示例代码:
ClassA.h文件:
#import <Foundation/Foundation.h>
#import "ClassB.h"
@interface ClassA : NSObject <ClassBDelegate>
@end
Run Code Online (Sandbox Code Playgroud)
ClassA.m文件:
#import "ClassA.h"
@implementation ClassA
-(void)createAnInstanceOfClassB
{
ClassB *myClassB = [[ClassB alloc]init]; //create an instance of ClassB
myClassB.delegate = self; //set self as the delegate
// [myClassB optionalClassBMethod]; //this is optional to your question. If you also want ClassA to call method from ClassB
}
-(void)calculate
{
NSLog(@"Do calculate thing!"); // calculate can be called from ClassB or ClassA
}
@end
Run Code Online (Sandbox Code Playgroud)
ClassB.h文件:
#import <Foundation/Foundation.h>
@protocol ClassBDelegate <NSObject>
-(void)calculate; //method from ClassA
@end
@interface ClassB : NSObject
@property (assign) id <ClassBDelegate> delegate;
//-(void)optionalClassBMethod; //this is optional to your question. If you also want ClassA to call method from ClassB
@end
Run Code Online (Sandbox Code Playgroud)
ClassB.m文件:
#import "ClassB.h"
@implementation ClassB
@synthesize delegate;
-(void)whateverMethod
{
[self.delegate calculate]; // calling method "calculate" on ClassA
}
//-(void)optionalClassBMethod //this is optional to your question. If you also want ClassA to call method from ClassB
//{
// NSLog(@"optionalClassBMethod");
// [self whateverMethod];
//}
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13714 次 |
| 最近记录: |