我开始在我的 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/