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

因此,这是可能的:

@objc public enum SomeEnumType: Int {
    case OneCase
    case AnotherCase
}

但这不是:
public func someFunc(someArrayOfEnums: Array<SomeEnumType>) -> Bool {
    return true
}

有人可以验证吗?您如何建议解决此问题?一种方法是具有两个方法声明,例如:
// 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
}

但这会污染Swift界面。有什么办法可以为任何Swift使用者隐藏第二个函数声明?

最佳答案

看来,即使Array<SomeEnumType>SomeEnumType,我们也无法将@objc参数公开给Obj-C。

解决方法是:

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

func someFunc(someArrayOfEnums: Array<SomeEnumType>) -> Bool {
    return true
}

关于ios - 将一系列枚举从Swift桥接到Objective-C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30453961/

10-13 00:59