将Swift 4枚举桥接到目标C

安东宁·查瓦特

编辑:我向大家表示歉意,这是我一直的错-即使在Swift 3中也不可能。我很困惑自己。很抱歉这个问题。

在Swift 4中,不再可能将枚举值数组桥接到Objective C,甚至不能使用@objc注释:

@objc open func removeCacheAfterDelay(_ delay: Double, forType types: [CacheManagerType]) {
}

@objc public enum CacheManagerType: Int, RawRepresentable {
    case credit
    case debit
    case transactionHistory
}

removeCacheAfterDelay函数显示以下错误

无法将方法标记为@objc,因为无法在Objective-C中表示参数2的类型

我想念什么吗?有什么解决方法吗?

马特

您必须像Objective-C一样思考。将该声明转换为Objective-C可能意味着什么?特别是什么[CacheManagerType]意思?它必须是一个包含CacheManagerType对象的数组,即NSArray。

但这是不可能的。CacheManagerType是一个枚举。桥接到Objective-C的Int枚举被转换为Objective-C枚举。为了使方法声明可以在Objective-C中使用,Objective-C必须能够理解枚举数组的概念,而事实并非如此。在Objective-C中,枚举不是对象,但是NSArray只能容纳对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章