objective-c - 在 Swift 扩展文件中访问 Obj-C 属性

标签 objective-c swift swift-extensions

我开始在我的 View Controller 上编写 Swift 扩展。所以我现在有三个文件:

我的头文件,ViewController.h:

@interface MyViewController : UIViewController

@end

我的 Obj-C 实现文件,ViewController.m:

@interface MyViewController () <UIScrollViewDelegate>
@property (strong, nonatomic) UIScrollView *scrollView;
@end

@implementation MyViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    self.scrollView = [[UIScrollView alloc] init];
    [self customiseScrollView]; //This is Swift method called from Obj-C file
}

@end

最后,ViewController.swift:

extension MyViewController {

    func customiseScrollView() {

    }
}

我的问题是,是否可以从我的 Swift 实现文件访问我的 Obj-C 属性?每次我引用它时,我都会得到一个错误:

Value of type 'MyViewController' has no member 'scrollView'

奖励 1:有人还可以澄清 Swift 组件是否也可以看到 .m 是什么的委托(delegate)。 (澄清一下,在 Swift 中执行 scrollView.delegate = self 是编译错误,因为 Swift 文件没有意识到 .m 文件是 UIScrollViewDelegate)。

奖励 2:Swift 扩展文件可以调用从 .m 副本声明的 Obj-C 方法吗?

最佳答案

我认为您不能从扩展中访问私有(private)属性。您的 scrollView 属性在 .m 文件中,而不是 .h - 这意味着它是私有(private)的,并且在扩展文件中不可见。

解决办法:移动

@property (strong, nonatomic) UIScrollView *scrollView;

到你的头文件。

关于objective-c - 在 Swift 扩展文件中访问 Obj-C 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33275758/

相关文章:

ios - 转移的 iOS 应用程序 - 推送不起作用

xcode - 自 swift 2.2 起,泛型类测试崩溃

ios - 如何获取数组中的字典对象

objective-c - 如何在扩展中定义的 Objective-C 中使用静态方法

ios - 如何在 AFNetworking 中设置授权 header

objective-c - 存储 JSON iTunes 搜索 API 数据

arrays - 数组或字典扩展中的 Swift 3.0 : compiler error when calling global func min<T>(T, T)

swift - 自身,协议(protocol)扩展和非最终类

objective-c - 如何在 OSX 上的应用程序运行时获取更改名称的文件?

if 语句为 true 的 Swift Break 循环