自Swift 2.2以来无法访问extern NSString

时间:2016-03-22 07:38:02

标签: xcode swift

自从使用Swift 2.2更新到Xcode 7.3后,我无法从外部Objective-C库访问变量。

从今天起我就能够访问这些变量:

extern NSString* const DEFAULT_URL;  

这是在预编译的.a框架的Objective-C头文件中定义的。

在我的快捷代码中,我只需要拨打DEFAULT_URL

自Swift 2.2以来,我得到以下错误:

Use of unresolved identifier 'DEFAULT_URL'  

我可以访问此框架的类和方法,但我无法访问extern NSStrings

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:34)

@patrickS我有一个愚蠢的原因,我的外部const是在我的.h文件中的@interface中定义的。这似乎使得这个版本的XCode / Clang的Swift代码变得私密。它适用于所有extern consts,而不仅仅是NSString *。

e.g。

//In Foo.h
extern const int kBlah

@interface Foo
...
@end

而不是

//In Foo.h
@interface Foo
extern const int kBlah
...
@end

答案 1 :(得分:2)

我有同样的问题,在问题中,ext字符串在我的情况下是在依赖管理( cough pod cough )第三方库中。因此,从长远来看,我不能轻易地移动它们而不会弄乱一切。

我找到了两个解决方案:

  1. 将ext声明复制粘贴到您的桥接(底部) 头
  2. 在目标c中编写自己的静态助手类 提供ext字符串作为类方法(并使这个静态助手可用于Swift)
  3. 我告诉你,你认为这两种解决方案中哪一种不那么苛刻(我选择解决方案1,因为我很懒)。