2016-08-02 46 views
-1

我不能在我的項目中的特定類中導入swift頭文件,雖然它適用於所有其他類。 我已經添加未找到MyApp-Swift.h文件。對於特定的類只有

#import "MyApp-Swift.h" 

有趣的是,它的作品,如果我導入它在實現文件中,但不是在頭文件。我得到的錯誤是:

MyApp-Swift.h file not found. 

爲什麼?

+0

所以目標c或迅速?這是一個巨大的差異 –

+0

如果你指的是問題標籤,兩者都包含在內,因爲問題是關於將swift代碼與objective-C集成。 – aneuryzm

+0

嘗試在構建設置中命名橋接頭像這樣在構建設置'MyApp_Swift.h' –

回答

0

請參閱在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(); 
+0

我的確看到了。當我需要創建一個公共屬性(這應該可以被其他類顯示)時,我的問題就出現了,它使用了一個快速協議。在這種情況下,我需要公開頭中的屬性(以及協議)。 (而且我不能轉發聲明協議)。你在這種情況下建議什麼? – aneuryzm

+0

我沒有看到提出聲明協議的問題。我已經添加了一個簡單的例子。希望它有幫助。如果我誤解了你正在努力完成的任務,請告訴我。 – OmniProg

+0

mhm有趣。如果我按照前面的說明轉發聲明協議:「@protocol MySwiftProtocol;」,我得到一個警告錯誤:「找不到MySwiftProtocol的協議定義,難道你沒有得到這樣的警告嗎? – aneuryzm

相關問題