我不能在我的項目中的特定類中導入swift頭文件,雖然它適用於所有其他類。 我已經添加未找到MyApp-Swift.h文件。對於特定的類只有
#import "MyApp-Swift.h"
有趣的是,它的作品,如果我導入它在實現文件中,但不是在頭文件。我得到的錯誤是:
MyApp-Swift.h file not found.
爲什麼?
我不能在我的項目中的特定類中導入swift頭文件,雖然它適用於所有其他類。 我已經添加未找到MyApp-Swift.h文件。對於特定的類只有
#import "MyApp-Swift.h"
有趣的是,它的作品,如果我導入它在實現文件中,但不是在頭文件。我得到的錯誤是:
MyApp-Swift.h file not found.
爲什麼?
請參閱在Objective-C頭文件中引用Swift類或協議一節https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html。這聽起來只是一個建議,但根據我的經驗,編譯器實際上會強制執行此操作。如果我真的需要在頭文件中使用Swift類,而不是源文件,我通常可以通過使用前向聲明來解決問題,如上面引用的Apple出版物中所述。
這是一個非常簡化的例子。第一一些銀行代碼:
import Foundation
// A Swift protocol usable in Objective-C
@objc protocol MySwiftProtocol
{
func mySwiftProtocolFun();
}
// A Swift class conforming to the Swift protocol
class MySwiftClass : NSObject, MySwiftProtocol
{
func mySwiftProtocolFun() {
print("Hello from MySwiftClass!")
}
}
// Call an Objective-C function
aFunctionOC()
下一步是使用夫特協議Objective-C的報頭:
執行MyClassOC
#import "Foundation/Foundation.h"
// Forward declaration of a Swift protocol is OK here
@protocol MySwiftProtocol;
@interface MyClassOC : NSObject
// Here we've got a property conforming to the Swift protocol
@property id<MySwiftProtocol> prop1;
-(void)callSwiftProtocol;
@end
:
#import "objc.h"
#import "cli_swift-Swift.h"
@implementation MyClassOC
-(void)callSwiftProtocol
{
[self.prop1 mySwiftProtocolFun];
}
@end
另一個Objective-C類使用MyClassOC
:
#import "objc.h"
#import "cli_swift-Swift.h"
// An Objective-C function that uses an Objective-C class
// that has a property conforming to a Swift protocol
void aFunctionOC()
{
MyClassOC * x = [[MyClassOC alloc] init];
x.prop1 = [[MySwiftClass alloc] init];
[x callSwiftProtocol];
}
最後,這裏是一個橋接報頭暴露aFunctionOC()
到夫特:
void aFunctionOC();
我的確看到了。當我需要創建一個公共屬性(這應該可以被其他類顯示)時,我的問題就出現了,它使用了一個快速協議。在這種情況下,我需要公開頭中的屬性(以及協議)。 (而且我不能轉發聲明協議)。你在這種情況下建議什麼? – aneuryzm
我沒有看到提出聲明協議的問題。我已經添加了一個簡單的例子。希望它有幫助。如果我誤解了你正在努力完成的任務,請告訴我。 – OmniProg
mhm有趣。如果我按照前面的說明轉發聲明協議:「@protocol MySwiftProtocol;」,我得到一個警告錯誤:「找不到MySwiftProtocol的協議定義,難道你沒有得到這樣的警告嗎? – aneuryzm
所以目標c或迅速?這是一個巨大的差異 –
如果你指的是問題標籤,兩者都包含在內,因爲問題是關於將swift代碼與objective-C集成。 – aneuryzm
嘗試在構建設置中命名橋接頭像這樣在構建設置'MyApp_Swift.h' –