在Swift中公开Objective C类扩展属性

时间:2015-03-23 16:08:08

标签: objective-c swift properties class-extensions

说我在Objective C实现文件(MyVC.m)中有以下内容:

@interface MyVC ()
  @property (nonatomic, weak) IBOutlet UILabel *titlelabel;
@end

如何将此私有属性公开给Swift(测试)代码?以下原因导致编译器错误:

extension LTConversationSelectionVC {
   @IBOutlet weak var assetBar: LTAssetBar?
}

3 个答案:

答案 0 :(得分:1)

来自apple doc


  

扩展可以添加新的计算属性,但它们无法添加存储   属性,或将属性观察者添加到现有属性。


Apple documentation Link here

答案 1 :(得分:1)

不幸的是,没有办法纯粹使用Swift来做到这一点。但是,您可以在测试目标中的Objective-C文件中公开该属性,然后将其放在测试目标的桥接标题中。

MyVC + Tests.h 添加到测试目标:

<my-app>

<强> MyAppTests-桥接-Header.h

@interface MyVC (Tests)
  @property (nonatomic, weak) IBOutlet UILabel *titlelabel;
@end

然后,在测试目标中的Swift代码中,您可以按预期使用#import "MyVC+Tests.h" 属性。

titleLabel

答案 2 :(得分:0)

您可以从桥接头文件中执行相同的属性类别技巧。只需转发任何调用swift库的类。那应该解决这个问题。