我们的应用是使用 Cordova 的混合应用。因此,很多逻辑都在 webview 中完成。
我遇到了一个需要访问 webview 对象的场景。
问题是我拿不到它!
这是基类CDVPlugin.h
:
@interface UIView (org_apache_cordova_UIView_Extension)
@end
// Stuff
@interface CDVPlugin : NSObject {}
@property (nonatomic, readonly, weak) UIView* webView; // This is what I want
深入研究 CDVPlugin.m
文件,它看起来像这样:
@interface CDVPlugin ()
// Other codes
- (UIView*)webView
{
if (self.webViewEngine != nil) {
return self.webViewEngine.engineWebView;
}
return nil;
}
我扩展 CDVPlugin 的 Bridge.swift
文件如下所示:
@objc(Bridge) class Bridge:CDVPlugin
{
func getWebView() -> UIWebView
{
self.webView // Does not exist
}
}
我更加困惑了,因为它的其他子类能够访问这个 webView 变量。例如这个插件类:
#import "CDVPlugin.h"
@interface CDVGestureHandler : CDVPlugin
@property (nonatomic, strong) UILongPressGestureRecognizer* lpgr;
@end
能够访问私有(private)方法就好了吗?
#import "CDVGestureHandler.h"
@implementation CDVGestureHandler
- (void)pluginInitialize
{
NSArray *views = self.webView.subviews;
}
我不确定为什么其他一些 Objc 类能够从其父类访问私有(private)方法,或者为什么我不能从扩展它的 Swift 类访问它。
如果您能告诉我如何访问这个 webView
对象,我会洗耳恭听!
最佳答案
轻微的 derp 时刻。
我的类(class)使用的是全局函数,因此它无法访问成员变量。错误信息让我偏离了方向。
"Instance member cannot be used on type Bridge".
我现在明白了,这意味着它是类函数中的实例访问。我想知道是不是黑暗之魂3的博学者写了编译错误。
关于ios - 无法在扩展 Objective - C 类的 Swift 类中访问私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36877808/