一個Objective-C初始化(或方法)我有一個框架與具有一個Objective-C的類與一種指定初始化它有兩個NSArray
秒。在框架內部,我定義了一個擴展,它提供了一個額外的初始化器,它接受一個元組數組而不是兩個數組。隱藏夫特
當導入框架永恆,是有可能從隱藏原始Objective-C的初始化夫特(所以只有初始化服用元組的陣列可被使用),但使用時保持它可用框架 from Objective-C代碼?
一個Objective-C初始化(或方法)我有一個框架與具有一個Objective-C的類與一種指定初始化它有兩個NSArray
秒。在框架內部,我定義了一個擴展,它提供了一個額外的初始化器,它接受一個元組數組而不是兩個數組。隱藏夫特
當導入框架永恆,是有可能從隱藏原始Objective-C的初始化夫特(所以只有初始化服用元組的陣列可被使用),但使用時保持它可用框架 from Objective-C代碼?
答:
使用
NS_SWIFT_UNAVAILABLE
宏(僅限於Xcode 7及以上)。
,你可以:
YourApp-Brindging-Header.h
#define __BRIDGING__
#import "YourObjCObject.h"
#undef __BRIDGING__
YourObjCObject.h通過@mattt
#import <Foundation/Foundation.h>
@interface YourObjCObject : NSObject
@property (assign, nonatomic) NSInteger count;
- (instancetype)initWithArray:(NSArray *)ary1 Array2:(NSArray *)ary2 NS_DESIGNATED_INITIALIZER
#ifdef __BRIDGING__
NS_UNAVAILABLE
#endif
;
@end
順便說一句,如果你從Swift中隱藏*指定的初始化方法*,你如何在Swift擴展方法中實現*方便的初始化方法? – rintaro
是的,那是我的問題的一部分。我想在我自己的方便初始值設定器上使用它,但我想將它隱藏在別處。如果這是不可能的,我可以重新從Swift重新實現*指定的初始化器*。此外,還有一個問題,這是在一個框架內,它沒有橋頭(如[這裏]所述)(https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch的.html))。我的請求行爲是否可以爲框架的用戶實現? –
或者換句話說,可以從預處理器宏中檢測到* Swift *的用法,而不需要在解決方案中手動定義'__BRIDGING__'。 –