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)
| 归档时间: |
|
| 查看次数: |
1854 次 |
| 最近记录: |