Objective-C中的Private Setter,从Swift 3.2 +

时间:2017-10-16 20:01:06

标签: swift private-members

这是我们在从Xcode 8转到9(Swift 3.1-> Swift 3.2 / 4)时看到的情况。它是一个常见的例子,它有一个只读属性的公共头文件和带有读/写定义的私有头文件以及需要访问的Swift代码(在这种情况下是单元测试,但可能只是一个混合的ObjC / Swift项目)二传手。我以为我会分享我们如何解决这个问题。

主类:

Objective-C标头

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

然后我们有一个私人标题:

Objective-C标头

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

然后在Bridging标头中我们包括原始标头和私有标头。使用Xcode 8(Swift 3.1),这很好用。在Xcode 9(Swift 3.2 / 4)中,我们收到了属性为只读的错误。

1 个答案:

答案 0 :(得分:2)

对我们有用的是什么:

将私有测试标题更改为:

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

@interface SomeClass (Testing) <SomeClassTesting>
@end