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,获取两个成员变量中的任何一个的访问器?的主要内容,如果未能解决你的问题,请参考以下文章

如何对类中的私有成员变量进行赋值和访问

iOS 开发:成员变量(属性,实例变量)的相关知识

C++中pair详解

如何在成员函数 #2 中访问成员函数 #1 中的变量?

iOS 局部变量 全局变量 成员变量

iOS开发中 类对象实例变量成员变量属性变量等区别和关系