2017-10-16 105 views
1

下面是我们从Xcode 8移动到9(Swift 3.1-> Swift 3.2/4)时看到的情况。它是一个常见的情况,它有一个公共头文件,它具有只读属性和带有读/写定义的私有头文件,以及需要访问的Swift代码(在这种情况下是单元测试,但可能只是一个混合的ObjC/Swift项目)制定者。我想我会分享我们如何解决这个问题。Objective-C中的私人安装程序,从Swift中访问3.2+

主类:

Objective-C的标题

@interface SomeClass : NSObject { 
    @property (nonnull, nonatomic, readonly) SomeOtherClass* var; 
} 
@end 

然后,我们有一个专用标题:

Objective-C的标题

@interface SomeClass (Testing) { 
    @property (nonnull, nonatomic, readwrite) SomeOtherClass* var; 
} 
@end 

的在桥接报头中,我们包括原始报头和私有报头。使用Xcode 8(Swift 3.1),这工作得很好。在Xcode 9(Swift 3.2/4)中,我们得到一个错误,说明该属性是只读的。

回答

2

什么对我们的工作:

更改专用测试头的使用方法:

@protocol SomeClassTesting <NSObject> 
    @property (nonnull, nonatomic, readwrite) SomeOtherClass* var; 
@end 

@interface SomeClass (Testing) <SomeClassTesting> 
@end