2015-04-01 33 views
0

我剛剛嘗試在Swift項目中導入名爲DDHotKey的Objective-C庫,並且在某些情況下它不起作用。無法在Swift項目中使用Objective-C庫

這裏是我做的步驟:

  • 下載 「DDHotKey」 庫
  • 右鍵單擊項目 - > 「添加文件到%PROJECT_NAME%」 - >選擇「DDHotKey主「文件夾」複製項目,如果需要「複選框和」創建文件夾引用「單選按鈕啓用
  • 根據Apple文檔,提示有關橋接頭應出現然後,但它didn'tt--文件只是複製到項目的目錄
  • 我試着將橋接頭添加到p使用名稱「bridge.h」手動創建項目(文件 - >新建 - >源代碼 - >頭文件),將其設置爲項目設置(構建設置 - > Swift編譯器 - 代碼生成 - > Objective- C橋接頭 - >「並將以下代碼放在此文件中:

#ifndef project_name_bridge_h 
#define project_name_bridge_h 

#import "DDHotKey-master/DDHotKeyCenter.h" 

#endif 

現在它編譯如下代碼:

var hotKeyCenter = DDHotKeyCenter.sharedHotKeyCenter() 

但是,當我試圖調用這個對象的方法,我得到了一個錯誤:

hotKeyCenter.registerHotKeyWithKeyCode(34, modifierFlags: 0, task: (NSEvent) { 
    println("str") 
}) 

Missing argument for parameter 'action' in call

雖然有是兩種方法,我使用不同的一種:

- (DDHotKey *)registerHotKeyWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags target:(id)target action:(SEL)action object:(id)object; 

- (DDHotKey *)registerHotKeyWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags task:(DDHotKeyTask)task; 

爲什麼?我究竟做錯了什麼?我該如何解決它?

在此先感謝。

回答

1

您的閉包語法不正確。我想你指的是以下幾點:

hotKeyCenter.registerHotKeyWithKeyCode(34, modifierFlags: 0, task: { _ in 
    println("str") 
}) 

_ in可能是不必要的,如果類型推斷可以理出頭緒,但我懷疑你需要它。然而,領先的(NSEvent)不適合Swift語法。

+0

啊,對不起,非常感謝。不幸的是,它現在沒有鏈接 - 出於某種原因,它看不到像DDHotKeyCenter這樣的符號,並給我一個錯誤「架構x86_64的未定義符號:」_OBJC_CLASS _ $ _ DDHotKeyCenter「」。可能是這種行爲的原因是什麼? – FrozenHeart 2015-04-01 13:44:02

+0

這是一個無關的問題。你幾乎肯定無法鏈接DDHotKeyCenter。如果你認爲你是,在一個新的問題中描述你的情況(儘管搜索所以將objc鏈接到swift可能會幫助你)。 – 2015-04-01 14:02:44