无法在扩展Objective-C类的Swift类中访问私有变量

时间:2016-04-26 23:50:20

标签: ios objective-c swift cordova webview

我们的应用是使用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

能够正常访问私有方法吗?

#import "CDVGestureHandler.h"

@implementation CDVGestureHandler

- (void)pluginInitialize
{
   NSArray *views = self.webView.subviews;
}

我不确定为什么其他一些Objc类能够从其父级访问私有方法,或者为什么我无法从扩展它的Swift类访问它。

如果你可以告诉我如何访问这个webView对象我很满意!

测试显示自己如何访问它,但实例可以。 enter image description here

1 个答案:

答案 0 :(得分:0)

轻微的derp时刻。

我的班级正在使用全局函数,因此无法访问成员变量。错误消息让我失去了基础。

  

“实例成员不能在类型Bridge上使用”。

我现在看到它意味着它是类func中的实例访问。我想知道Dark Souls 3的主持人是否写了编译错误。