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

标签 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

能够访问私有(private)方法就好了吗?

#import "CDVGestureHandler.h"

@implementation CDVGestureHandler

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

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

如果您能告诉我如何访问这个 webView 对象,我会洗耳恭听!

测试表明自己如何无法访问它但一个实例可以。 enter image description here

最佳答案

轻微的 derp 时刻。

我的类(class)使用的是全局函数,因此它无法访问成员变量。错误信息让我偏离了方向。

"Instance member cannot be used on type Bridge".

我现在明白了,这意味着它是类函数中的实例访问。我想知道是不是黑暗之魂3的博学者写了编译错误。

关于ios - 无法在扩展 Objective - C 类的 Swift 类中访问私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36877808/

相关文章:

swift - 以编程方式通知 Apple Watch。 ( watch 操作系统 3)

ios - viewController 中的 UiTableView - 未调用委托(delegate)和数据源方法

ios - 使用特殊键在 NavigationController 中找到 ViewController

ios - 使用 Facebook iOS SDK 发布运行操作

ios - SpriteKit 滚动 SKCameraNode 非常有问题

ios - 为什么需要在一个 View Controller 中使用委托(delegate)?

iphone - 如何使用具有一定随机性的 CAReplicatorLayer 创建 Spark 效果?

ios - 具有动态内容的 UIScrollView

iphone - iOS 静态单元格、自动滚动和附加工具栏键盘

ios - 为什么我下载头像的函数被调用了数千次?