0

我正在尝试使用 WKWebView。
问题是我也必须支持 UIWebView,因为有些人的 ios < 8。

@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];
    }
}
4

1 回答 1

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;

我希望这会有所帮助。

于 2014-10-12T13:58:43.773 回答