从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/