How to access enumeration in Swift from Objective-C?

There is a global enum defined in Objective-C:

typedef enum {
     UMSocialSnsTypeNone = 0,
     UMSocialSnsTypeQzone = 10,
     UMSocialSnsTypeSina = 11,                 //sina weibo
} UMSocialSnsType;

This code sets the type of platform resource:

snsPlatform.shareToType = UMSocialSnsTypeDouban;

In Swift, I want to get the sharetype platform:

var snstype = snsPlatform!.shareToType
println(snstype)

Result: UMSocialSnsType (has 1 child)

snstype.toRaw()

Error: UMSocialSnsType does not have a member named "toRaw"

+4
source share
1 answer

, , 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, , .


, Swift- 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.
}
+9
source

Source: https://habr.com/ru/post/1546944/


All Articles