2016-01-21 176 views
1

假設我有一個名爲Connector.m的連接器(用Objective-C編寫)。我想創建一個使用Swift編寫的名爲Connector.swift的新連接器。我想訪問Swift中的所有變量和方法。我創建了一個橋接頭並寫入連接器頭文件的導入。但是我無法訪問Objective-C類中的任何全局變量。從Swift訪問Objective-C變量/函數

Connector.m

NSString * const kHTTP_METHOD_GET = @"GET"; 

Connector.swift

public class Connector: NSObject { 

    var parentConnector : Connector 

    override init() { 
     self.parentConnector = Connector 
    } 

    func test() { 
     print(parentConnector.kHTTP_METHOD_GET) //--> ERROR : Value of type 'Connector' has no member 'kHTTP_METHOD_GET' 
    } 

} 

是否有可能做到這一點?謝謝。

回答

0

我相信Connector.m中的方法/變量也需要公開才能工作。

+0

如何做到這一點?順便說一句,Connector.m中的變量超出了@implementation範圍.. –

+0

只是添加公共'公共NSString *常量kHTTP_METHOD_GET = @「GET」;' – chamille

+0

另外,你不是試圖訪問一個swift對象的實例,它沒有名爲'kHTTP_METHOD_GET'的成員?我認爲你的swift類需要一個不同的名字。 – chamille

0

這聽起來像是Adapter Pattern的一個很好的使用案例。但是你應該能夠輕鬆訪問Objective-C代碼。

確保您的橋接報頭文件被命名爲這樣的:

{your-project-name}-Bridging-Header.h 

您的橋接報頭內添加如下內容:

#import "Connector.m" 

,那麼你必須確保編譯器知道你的橋接報:

單擊您的根項目>選擇您的目標應用>構建設置

然後滾動,直到您看到這一點:

enter image description here

確保您的橋接報上市,建立和你應該有訪問您的Objective-C代碼。

+0

謝謝,但我們可以導入實現文件而不是頭文件嗎?我導入實現文件時出錯,它說沒有找到。是的,我確保橋接頭被列出。 –

+0

嗯..不知道這一點,我只知道如何使用標準橋接頭訪問objective-c –

1

在Connector.h中添加以下行。

extern NSString * const kHTTP_METHOD_GET; 

將Connector.h包含在橋接頭文件中。

0

確保您有標題這樣的文件...

{project-name}-Bridging-Header.h 

添加類文件在縮小,Header.h

#import "Connector.h" 

,把你下面的代碼Connector.h file..Because在Bridging-Header.h中只會導入頭文件

NSString * const kHTTP_METHOD_GET = @"GET"; 

到@interface範圍之上..

+0

它解決了你的問題? – Bhoomi