【问题标题】:use #define in objective C and access in swift class在目标 C 中使用 #define 并在 swift 类中访问
【发布时间】:2018-12-12 17:37:48
【问题描述】:

我在目标 c 类中定义了#define baseUrl [NSString stringWithFormat:@"%@api/v4", MAINURL],并且可以访问项目中的任何位置。但是现在我已经在退出目标 c 项目中创建了 swift 文件,并希望快速访问 baseurl 但收到错误。

Use of unresolved identifier 'baseUrl'

如何解决?

【问题讨论】:

标签: ios objective-c swift xcode


【解决方案1】:

很遗憾,Objective-C #define 无法通过 swift 访问。

也许您将#defines 更改为实际常量,这比#defines 更好。

或者创建一个 swift 对象来保存一些静态变量。

例如:

class API: NSObject {
    static let apiPrefix = "https://vvv"
    static let apiPosts = apiPrefix + "posts"
}

来电:API.apiPosts

【讨论】:

  • 我现在正在使用 extern NSString* const baseUrlV4 @"abc" 但无法访问
  • 如何使用实际的常量?
  • 尝试定义extern NSString* const baseUrlV4并将那个.h文件放入Bridging-Header.h
【解决方案2】:

将 Objective-C 宏导入 Swift 并不总是有效。根据documentation

Swift 自动导入简单的、类似常量的宏,用#define 指令声明,作为全局常量。当宏使用字面量表示字符串、浮点数或整数值,或者在字面量或之前定义的宏之间使用 +、-、> 和 == 等运算符时,会导入宏。

比简单常量定义更复杂的 C 宏在 Swift 中没有对应物。

在您的情况下,另一种方法是使用返回宏定义的值的函数

// .h file
#define baseUrl [NSString stringWithFormat:@"%@api/v4", MAINURL]
+ (NSString*) BaseUrl;

// .m file
+ (NSString*) BaseUrl { return baseUrl }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多