ios,获取两个成员变量中的任何一个的访问器?
Posted
技术标签:
【中文标题】ios,获取两个成员变量中的任何一个的访问器?【英文标题】:ios, accessor to get either of two member variables? 【发布时间】:2014-10-12 12:56:59 【问题描述】:我正在尝试使用 WKWebView。 问题是我也必须支持 UIWebView,因为有些人使用 ios
@property(nonatomic, strong) WKWebView* wkWebview;
@property(nonatomic, strong) UIWebView* uiWebview;
现在,看来我到处都需要两个版本的函数(或分支).. 看下面的函数。
有没有更简洁的方法来做到这一点?
- (void)loadWebview
NSURL* url = [NSURL URLWithString:self.mUrlString];
NSURLRequest* requestObj = [NSURLRequest requestWithURL:url];
if([self.isUseWKWebview])
[self.wkWebview loadRequest:requestObj];
else
[self.uiWebview loadRequest:requestObj];
【问题讨论】:
【参考方案1】:一种快速的方法是绕过所有类型检查
- (id)currentWebview
if ([self.isUseWKWebview])
return self.wkWebview;
else
return self.uiWebview;
然而,我更愿意使用两个类共有的方法声明一个协议。
@protocol AnyWebviewType
- (void)commonLoadRequest:(NSURLRequest *)requestObj;
那么我们需要每个类都有一个类别
@interface UIWebview (AnyWebviewType) : AnyWebviewType
@end
@interface WKWebView (AnyWebviewType) : AnyWebviewType
@end
现在currentWebview方法声明变成了
- (id<AnyWebviewType>)currentWebview;
我希望这会有所帮助。
【讨论】:
看起来很有希望!定义- (void) loadRequest
来隐藏原始函数会是一个坏主意吗?而不是commonLoadRequest
是的 - 永远不要在类别中定义与定义类别的类中的现有方法同名的方法。未定义哪个方法将被调用运行时。您可以在类别中覆盖超类中的方法。以上是关于ios,获取两个成员变量中的任何一个的访问器?的主要内容,如果未能解决你的问题,请参考以下文章