gpt4 book ai didi

objective-c - 如何在 Swift 中使用 Objective-C#define

转载 作者:IT老高 更新时间:2023-10-28 11:26:46 25 4
gpt4 key购买 nike

我正在迁移一个 UIViewController 类以使用 Swift 进行一些训练。我通过桥接头成功地使用了 Objective-C 代码,但我需要导入一个包含 #define 指令的常量文件。

我在 Using Swift with Cocoa and Objective-C 上见过(简单宏)如下:

Simple Macros

Where you typically used the #define directive to define a primitive constant in C and Objective-C, in Swift you use a global constant instead. For example, the constant definition #define FADE_ANIMATION_DURATION 0.35 can be better expressed in Swift with let FADE_ANIMATION_DURATION = 0.35. Because simple constant-like macros map directly to Swift global variables, the compiler automatically imports simple macros defined in C and Objective-C source files.

所以,这似乎是可能的。我已将包含我的常量的文件导入到桥接头中,但我的 .swift 文件没有可见性,无法解析。

我应该怎么做才能让我的常量对 Swift 可见?

更新:

似乎可以使用 NSString 常量,但不能使用 bool 值:

#define kSTRING_CONSTANT @"a_string_constant" // resolved from swift
#define kBOOL_CONSTANT YES // unresolved from swift

最佳答案

目前,有些 #define 已转换,有些则未转换。更具体地说:

#define A 1

...变成:

var A: CInt { get }

或者:

#define B @"b"

...变成:

var B: String { get }

很遗憾,Swift 编译器无法识别和转换 YESNO

我建议你将你的 #defines 转换为实际的常量,这比 #defines 好。

.h:

extern NSString* const kSTRING_CONSTANT;
extern const BOOL kBOOL_CONSTANT;

.m

NSString* const kSTRING_CONSTANT = @"a_string_constant";
const BOOL kBOOL_CONSTANT = YES;

然后 Swift 会看到:

var kSTRING_CONSTANT: NSString!
var kBOOL_CONSTANT: ObjCBool

另一种选择是将您的 BOOL 定义更改为

#define kBOOL_CONSTANT 1

更快。但不如实际常量。

关于objective-c - 如何在 Swift 中使用 Objective-C#define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24325477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com