项目混合了 oc
和 swift
。
#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/