2016-01-21 211 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