XCode中Objective-C游戏项目引入Swift常量文件的方法
在Objective-C类中使用Swift定义的常量的正确步骤
1. 正确定义可被Objective-C访问的Swift常量
在GameplayConstants.swift中,要让Objective-C能识别常量,必须用@objc修饰,遵循Objective-C的可见规则:
- 若为类级静态常量,需将类标记为
@objc并继承NSObject(或用@objcMembers简化):
import Foundation @objc class GameplayConstants: NSObject { @objc static let REGULAR_TIME_PER_FRAME: Float = 0.1 }
- 若为全局常量,直接给常量加
@objc修饰:
import Foundation @objc let REGULAR_TIME_PER_FRAME: Float = 0.1
2. 不要直接引入Swift源文件
你碰到的missing @end错误,是因为Objective-C无法直接解析Swift语法。Xcode会自动生成桥接头文件,用来打通Objective-C和Swift的访问,你需要引入这个自动生成的文件,而非直接#include Swift源文件。
3. 引入自动生成的桥接头文件
在HeroAnimationhelper.m中,引入格式为[你的项目名]-Swift.h的桥接头文件(替换成你实际的项目名称):
#import "YourProjectName-Swift.h"
注意:这个文件是Xcode自动生成的,无需手动创建,只要项目里有Swift文件且Defines Module已设为YES,就会自动生成。
4. 在Objective-C中访问Swift常量
- 类级静态常量通过类名访问:
float timePerFrame = GameplayConstants.REGULAR_TIME_PER_FRAME;
- 全局常量直接使用常量名:
float timePerFrame = REGULAR_TIME_PER_FRAME;
5. 额外配置检查
- 确认
Product Module Name(Build Settings -> Packaging下)与项目名称一致,这是桥接头文件命名的依据。 - 确保
GameplayConstants.swift和HeroAnimationhelper.m的Target Membership一致,都属于同一个target。
内容的提问来源于stack exchange,提问作者The Outstanding Question Asker
相关产品推荐
相关产品推荐

