ios - #import "Project-Swift.h"出现了一些奇怪的问题

标签 ios objective-c swift

项目混合了 ocswift

#import "myProjectName-Swift.h"AppDelegate.m 中:

项目是我创建的Objective-c语言,几乎都是用swift语言编写的。在 Appdelegate.m 中,我想使用 swift 的类,所以

但不幸的是,我的项目在 myProjectName-Swift.h 中发生了一些错误:

代码如下:

SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) 
NSString * _Nonnull ;)

+ (NSString * _Nonnull);
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) 
NSString * _Nonnull ;)

+ (NSString * _Nonnull);

SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong) UIColor * _Nonnull APP_COLOR;)

+ (UIColor * _Nonnull)APP_COLOR;

错误是:

Expected ';' at end of declaration list.

cannot declare variable inside @interface or @protocal

Expected member name or ';' after declaration specifiers

Expected ']'

Property requires fields to be named

Missing '[' at start of message send expression

等等……


注意
在全局 swift 中,我这样设置汉字变量:

class Global: NSObject {

}

编辑 - 1

因为我认为错误指出了static let ",所以我注释了这一行,项目不会显示这个错误。或者我删除,`, 也不会显示错误。

最佳答案

Objective-C 在标识符(变量名、类名、方法名等)中不支持 Unicode,仅在字符串文字(“🏋”)中支持。只允许 ASCII 的子集(以 _[a-zA-Z] 开头,之后是 +[0-9])。

例子:

class MyClass : NSObject {
  func 😞() { }
}

当您在混合项目中编译它时,这会中断。相反,您需要为其提供一个有效的 Objective-C 名称,如下所示:

class MyClass : NSObject {
  @objc(unhappyFace)
  func 😞() { }
}

这将编译(并且您需要在 ObjC 端以 unhappyFace 的形式访问它)。

或者在您的示例中,您需要修改您的全局对象:

class Global: NSObject {
  @objc(emptyNumberNotAllowed)
  static let 手机号码不能为空 = "手机号码不能为空"
  ... etc ...
}

关于ios - #import "Project-Swift.h"出现了一些奇怪的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40908324/

相关文章:

iphone - 检索nsarray的所有数据

ios - 当应用程序从内存中卸载时(iphone,内存不足)本地通知到达时会发生什么

objective-c - iOS Mediaplayer 和 URL 重定向

ios - 渐变未填充 UITableViewCell

swift - UTC 到本地时间 - 错误的结果很快

ios - Xcode Storyboard用蓝色遮盖了 uitabbarcontroller 元素

objective-c - 同一 NSManagedObject 之间的多种关系

iphone - 如何在单击按钮时加载 UIView

iOS:获取推送通知的所有消息

iphone - 等待 assetForURL block 完成