[英]How do I access an enum in Swift from Objective-C?
Objective-C中定义了一个全局枚举:
typedef enum {
UMSocialSnsTypeNone = 0,
UMSocialSnsTypeQzone = 10,
UMSocialSnsTypeSina = 11, //sina weibo
} UMSocialSnsType;
此代码设置平台的共享类型:
snsPlatform.shareToType = UMSocialSnsTypeDouban;
在Swift中,我想获得平台的sharetype:
var snstype = snsPlatform!.shareToType
println(snstype)
结果: UMSocialSnsType (has 1 child)
snstype.toRaw()
错误: UMSocialSnsType does not have a member named "toRaw"
据我所知, UMSocialSNSType
是在Objective-C中声明的,没有使用NS_ENUM
宏,所以它没有作为Swift enum
导入。 这意味着您不必使用.toRaw()
或UMSocialSNSType.Douban
而是必须使用不同的枚举值作为常量结构。 不幸的是,类型也没有设置适当的运算符( ==
或~=
),因此您必须比较value
属性。
var snstype = snsPlatform!.shareToType
switch snstype.value {
case UMSocialSnsTypeDouban.value:
println("douban")
case UMSocialSnsTypeEmail.value:
println("email")
default:
println("other")
}
if snstype.value == UMSocialSnsTypeDouban.value {
println("douban")
}
好消息是它看起来像Xcode中的所有常量自动完成,所以你应该能够找到你需要做的比较。
看起来像桥接类型的typedef...enum
版本typedef...enum
必须是这样的:
struct UMSocialSnsType {
var value:Int
init(_ val:Int) {
value = val
}
}
let UMSocialSnsTypeNone = UMSocialSnsType(0)
let UMSocialSnsTypeQzone = UMSocialSnsType(10)
let UMSocialSnsTypeSina = UMSocialSnsType(11)
// etc
如果它已在Objective-C中使用NS_ENUM宏声明,它看起来像:
enum UMSocialSnsType: Int {
case UMSocialSnsTypeNone = 0
case UMSocialSnsTypeQzone = 10, UMSocialSnsTypeSina // etc.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.