将一系列枚举从Swift桥接到Objective-C

Ste*_*mer 6 objective-c ios swift

从Swift 1.2开始,可以自动将Swift中的枚举转换为Objective-C.但是,据我所知,无法转换枚举数组.这是真的?

所以,这是可能的:

@objc public enum SomeEnumType: Int {
    case OneCase
    case AnotherCase
}
Run Code Online (Sandbox Code Playgroud)

但这不是:

public func someFunc(someArrayOfEnums: Array<SomeEnumType>) -> Bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以验证吗?你会如何推荐解决这个问题?一种方法是有两个方法声明,例如:

// This will not automatically get bridged.
public func someFunc(someArrayOfEnums: Array<SomeEnumType>) -> Bool {
    return true
}

// This will automatically get bridged.
public func someFunc(someArrayOfEnums: Array<Int>) -> Bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)

但这会污染Swift接口.有没有办法隐藏任何Swift消费者的第二个函数声明?

rin*_*aro 13

看来,Array<SomeEnumType>即使SomeEnumType是,我们也不能将参数暴露给Obj-C @objc.

作为一种解决方法,如何:

@objc(someFunc:)
func objc_someFunc(someArrayOfEnums: Array<Int>) -> Bool {
    return someFunc(someArrayOfEnums.map({ SomeEnumType(rawValue: $0)! }))
}

func someFunc(someArrayOfEnums: Array<SomeEnumType>) -> Bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)