2017-02-28 68 views
1

我的項目位於Swift 3.0中,我使用的是xCode8.2。我需要在我的swift項目中導入目標C代碼。目標C需要應用程序委託引用。我如何從我的目標C代碼中獲得快速appdelegate引用?如何從客觀c代碼中獲取Swift AppDelegate的參考

在我的目標C文件#進口「AppDelegate.h」是給未找到錯誤,因爲它是迅速的AppDelegate

+0

您是否使用swift代碼的目標c代碼?它是否與應用程序代表一起快速初始化? – Kie

+0

我的項目是在Swift中,我有一個模塊,它構建在Objective C中,在那個目標C模塊中它需要appdelegate參考。 –

+0

[我如何在Swift中獲取對應用程序委託的引用?](http://stackoverflow.com/questions/24046164/how-do-i-get-a-reference-to-the-app-代理在迅速) –

回答

3

正如紀伊已經說了,你需要#import "<ProductModuleName>-Swift.h"在你的Obj-C .m文件中獲取所有Swift類。這裏有一個你需要的樣品項目https://github.com/aminbenarieb/Researches/tree/master/Swift/Swift_ObjC

更新: 如果不能看到在Objective-C文件斯威夫特文件,請確保您有Objective-C bridging header,如Apple Documentation:

如下導入的Objective-C到斯威夫特

要在與您的Swift代碼相同的應用程序目標中導入一組Objective-C文件,您需要依賴Objective-C橋接頭將這些 文件公開給Swift。當您將 Swift文件添加到現有的Objective-C應用程序或Objective-C文件到 現有的Swift應用程序時,Xcode提供創建此頭文件。

+0

有什麼辦法,我可以下載該代碼? –

+0

我同樣這樣做像你Foo.m,我加了#進口「 ObjC.m文件中的MyProjectName-Swift.h。但它說無法找到MyProjectName-Swift.h文件。 –

+0

@AvijitDas, 1.要下載的代碼確保'git'安裝你機器上 - 在終端上運行: 'git的克隆https://github.com/aminbenarieb/Researches.git研究 CD研究 混帳過濾分支--prune空--subdirectory過濾斯威夫特/ Swift_ObjC HEAD ' - 否則你手動[下載項目](https://github.com/aminbenarieb/Researches/archive/master.zip),並找到SwiftObjC項目文件夾。 您是否添加了「Objective-C橋接頭」? –

5

我不知道這是否回答你的問題。

獲得的AppDelegate在斯威夫特

您可以從斯威夫特調用Objective-C代碼,如果你的Objective-C代碼需要一個AppDelegate中爲它在一些電話工作,你可以通過調用雨燕UIApplication.shared.delegate上山寨本。

let appDelegate = UIApplication.shared.delegate as! AppDelegate 

獲得的AppDelegate在Objective-C

如果需要的AppDelegate在你的Objective-C代碼多數民衆贊成的方式:

#import "<ProductModuleName>-Swift.h" // You have to replace with your swift module name 
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
+0

我需要它反向。從Objective C代碼我需要一個快速appdelegate的參考。 #import「AppDelegate.h」給出了未找到的錯誤,因爲它很快AppDelegate –

+0

我編輯了我的答案。爲了真正幫助你,下次你可以發佈一些你的代碼會有幫助。謝謝。 – Kie

+0

什麼是反對票? :) – Kie