gpt4 book ai didi

iphone - 在 Objective C 中调用另一个类的方法

转载 作者:可可西里 更新时间:2023-11-01 06:23:43 24 4
gpt4 key购买 nike

我有 2 个类(class),比如 A 类和 B 类。B类是在A类中创建的。我在A类中有一个方法,需要在A类和B类中都执行,调用A类本身的方法就可以了。但是我不确定在 B 类中调用该方法。我试过将方法声明为静态方法,但由于我不能在静态方法中使用实例变量,我认为使用委托(delegate)是个好主意。由于我来自 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();
}
}

是否可以使用协议(protocol)来做到这一点。

最佳答案

我刚刚在研究时偶然看到这篇文章。这是一个示例代码:

A类.h文件:

#import <Foundation/Foundation.h>
#import "ClassB.h"

@interface ClassA : NSObject <ClassBDelegate>
@end

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

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

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

关于iphone - 在 Objective C 中调用另一个类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9629417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com