Bridge Swift 4枚举到Objective C

时间:2017-10-06 12:35:13

标签: objective-c swift enums

编辑:我为你们所有人道歉,这一直都是我的错 - 即使在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,因为参数2的类型   不能用Objective-C表示

我错过了什么吗?有没有解决方法?

1 个答案:

答案 0 :(得分:2)

你必须像Objective-C一样思考。这个声明在翻译成Objective-C时可能意味着什么?特别是[CacheManagerType]意味着什么?它必须是一个包含CacheManagerType对象的数组,即NSArray。

但那是不可能的。 CacheManagerType是一个枚举。桥接到Objective-C的Int枚举变成了Objective-C枚举。为了使您的方法声明在Objective-C中工作,Objective-C需要能够理解枚举数组的概念 - 而事实并非如此。在Objective-C中,枚举不是对象,但NSArray只能包含对象。