我有一个类似
的enumtypedef NS_ENUM(NSInteger, MyEnum) {
MyEnumCase1,
MyEnumCase2,
...
};
和将这些枚举值映射到任意字符串
的函数FOUNDATION_EXPORT NSString *myEnumString(MyEnum val);
是否可以将其作为属性暴露给Swift ?
我试过了
FOUNDATION_EXPORT NSString *myEnumString(MyEnum val) NS_SWIFT_NAME(MyEnum.stringVal);
但是编译器给了我警告&;'swift_name'属性参数必须是指定Swift函数名的字符串字面值&;Swift调用者不会将stringVal
视为MyEnum
值的属性。
and I've try
FOUNDATION_EXPORT NSString *myEnumString(MyEnum val) NS_REFINED_FOR_SWIFT;
但是我的Swift扩展
extension MyEnum {
var stringVal {
return __myEnumString(self)
}
}
不能找到__myEnumString()
.
传递给NS_SWIFT_NAME
的Swift函数名必须包含隐式的self:
参数,并且要将其作为只读属性(而不是方法)导入,"getter":"必须加上前缀。在SE-0044 Import作为成员中可以找到各种示例。
NSString *myEnumString(MyEnum val)
NS_SWIFT_NAME(getter:MyEnum.stringVal(self:));
生成的Swift接口是
extension MyEnum {
public var stringVal: String { get }
}
,这在我的测试中按预期编译和运行:
print(MyEnum.case1.stringVal)