Since Swift 1.2 it\'s been possible to automatically convert enums in Swift to Objective-C. However, as far as I can tell, it is not possible to convert an array of enums. I
It seems, we cannot expose Array<SomeEnumType>
parameter to Obj-C even if SomeEnumType
is @objc
.
As a workaround, how about:
@objc(someFunc:)
func objc_someFunc(someArrayOfEnums: Array<Int>) -> Bool {
return someFunc(someArrayOfEnums.map({ SomeEnumType(rawValue: $0)! }))
}
func someFunc(someArrayOfEnums: Array<SomeEnumType>) -> Bool {
return true
}
Unfortunately an enum is not transferrable to Swift from Objective-C, it needs to be an NS_ENUM. I had the similar experience to you. The workaround I did was to create an Objective-C category that contains an NS_ENUM and there I transfer the values from the framework enum to my own NS_ENUM.
Import the category in your bridging header and you should be able to use the enum as you normally would do.
Something like this:
typedef NS_ENUM(NSUInteger, ConnectionStatus) {
ConnectionStatusIdle
}
- (ConnectionStatus)connectionStatus {
if [self getConnectionStatus] == WF_SENSOR_CONNECTION_STATUS_IDLE {
return ConnectionStatusIdle
}
}
Then you should be able to use it like this:
switch myObject.connectionStatus() {
case .Idle:
// do something
break
}