我开始在视图控制器上编写Swift扩展。所以我现在有三个文件:
我的头文件,ViewController.h
@interface MyViewController : UIViewController
@end我的Obj实现文件,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属性?每次我提到它,我都会发现一个错误:
Value of type 'MyViewController' has no member 'scrollView'奖金1:还能有人澄清Swift组件是否也能看到.m是什么委托。(澄清一下,在Swift中执行scrollView.delegate = self是一个编译错误,因为Swift文件没有意识到.m文件是一个UIScrollViewDelegate)。
红利2: Swift扩展文件可以调用从.m对应方声明的Obj方法吗?
发布于 2015-10-22 07:56:17
我认为你不能从分机访问私有财产。您的scrollView属性位于.m文件中,而不是.h中--这意味着它是私有的,并且在扩展名文件中不可见。
解决方案:移动
@property (strong, nonatomic) UIScrollView *scrollView;到你的头文件。
发布于 2018-12-26 15:43:12
如果在单独的头中声明objc类扩展并在桥接标头中包含该标头,则可以访问内部objc属性和方法。
MyClass.h
@interface MyClass : NSObject
@property (nonatomic, copy, readonly) NSString *string;
@endMyClass+Private.h
#import "MyClass.h"
@interface MyClass ()
@property (nonatomic, copy) NSString *string;
@endMyClass.m
#import "MyClass+private.h"
@implementation MyClass
//...
@endProject-Bridging-Header.h
#import "MyClass.h"
#import "MyClass+Private.h"发布于 2015-10-22 08:13:10
在Swift中,私有属性无法从其他文件访问。这是private在Swift中的意思。例如:
file1.迅速的
class MyClass {
    private var privateProperty: String = "Can't get to me from another file!"
}
extension MyClass: CustomStringConvertible {
    var description: String {
        return "I have a `var` that says: \(privateProperty)"
    }
}文件2.快速的
extension MyClass {
    func cantGetToPrivateProperties() {
        self.privateProperty // Value of type 'MyClass' has no memeber 'privateProperty'
    }
}在Objective类的实现中声明的属性是私有属性。因此,不能从Swift扩展名访问该属性,因为这必须来自不同的(.swift)文件.
https://stackoverflow.com/questions/33275758
复制相似问题