2017-10-16 40 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