我应该使用什么类型的?

时间:2013-05-12 15:30:05

标签: ios objective-c cocoa-touch

我的结果来自TWTweetComposeViewControllerResult或SLComposeViewControllerResult类型的方法。

我需要将此传递给方法。像

这样的东西
[self doSomething:result];

如何声明此方法?

- (void) doSomething:(SLComposeViewControllerResult) result ?

- (void) doSomething:(TWTweetComposeViewControllerResult) result ?

- (void) doSomething:(NSNumber *) result ?

2 个答案:

答案 0 :(得分:4)

制作两种不同的方法来处理每种方法。每个枚举都是不同的类型,应该这样对待。如果您只是指示成功,也可以使用布尔值转发结果,如果需要更多信息,还可以使用自己的自定义枚举。

- (void)doSomethingSL:(SLComposeViewControllerResult) result
{
   // made up, idk what the result enum would be be
   [self doSomething:(result == SLComposeSuccess)];
}

- (void)doSomethingTweet:(TWTweetComposeViewControllerResult) result 
{
   // made up, idk what the result enum would be be
   [self doSomething:(result == TWTweetSuccess)];
}

- (void)doSomething:(BOOL)success
{
}

如果您仍然确信要以统一的方式处理它们并忽略类型,则可以始终将结果转换为方法中的int并转发它们。

答案 1 :(得分:1)

SLComposeViewControllerResult和TWTweetComposeViewControllerResult都是枚举,0意味着取消,1意思完成。

所以这些都应该没问题:

- (void) doSomething:(SLComposeViewControllerResult) result;
- (void) doSomething:(TWTweetComposeViewControllerResult) result;
- (void) doSomething:(NSInteger) result;

[edit]请注意TWTweetComposeViewController.h中的这条评论:

// This class has been  deprecated in iOS 6. Please use SLComposeViewController (in the Social framework) instead.

所以你应该只使用SLComposeViewControllerResult版本。