2016-07-28 4 views
1

이의 우리가 C++ 코드 다음 있다고 가정 해 봅시다 매개 변수 : 그것은 완벽한되는 지금까지 매우 간단하고있어얻기 프로토콜은

struct ISomeInterface 
{ 
    virtual ~ISomeInterface() {} 
    virtual void f() = 0; 
}; 

class SomeClass : public ISomeInterface 
{ 
public: 
    void f() override 
    { 
     std::cout << "Hi"; 
    } 
}; 

void getObject(ISomeInterface*& ptr) 
{ 
    ptr = new SomeClass; 
} 

int main() 
{ 
    ISomeInterface* p(nullptr); 
    getObject(p); 
    p->f(); 
    delete p; 
} 

,하지만 그림을 그립니다 : 포인터를 가져 오는 인터페이스 객체에 via 함수의 매개 변수.

Objective C 프로토콜을 사용하여 동일한 결과를 얻으려면 어떻게해야합니까?

@protocol SomeProtocol <NSObject> 
- (void)f; 
@end 

@interface SomeClass : NSObject<SomeProtocol> 
- (void)f; 
@end 

@implementation SomeClass 
- (void)f { NSLog(@"Hi"); } 
@end 

미리 감사드립니다.

답변

1

, 당신은 할 수 있습니다 :

void getObject(id<SomeProtocol> *ptr) 
{ 
    if (ptr) { 
     *ptr = [[SomeClass alloc] init]; 
    } 
} 

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     id<SomeProtocol> p = nil; 
     getObject(&p); 
     [p f]; 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 
+0

그래, 실제로, 효과가 있었다. 객관적인 것 - c 특정 없음. 고맙습니다 –

1

C 스타일의 기능 :

id<SomeProtocol> getObject() 
{ 
    return [SomeClass new]; 
} 

목표 - C (클래스) 기능 : 당신이 실제로 참조 매개 변수를 원하는 경우

@implementation SomeOtherClass 

+ id<SomeProtocol> getObject 
{ 
    return [SomeClass new]; 
} 

@end 
+0

를 통해 함수의 매개 변수 - 질문입니다. –

+0

@AndrewLavq 왜 'return'문이 완벽하게 좋은가요? – Droppy

+0

함수가 성공했는지 여부를 호출자에게 알리려면 부울 값을 반환 할 수 있습니다. 또한 매개 변수를 통해 여러 프로토콜을 반환 할 수 있습니다. 이것은 전형적인 C++ 접근법이며 유용한 것으로 나타났습니다. –

관련 문제