繁体   English   中英

如何从Objective-C访问Swift中的枚举?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM