编辑:我为你们所有人道歉,这一直都是我的错 - 即使在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表示
我错过了什么吗?有没有解决方法?
答案 0 :(得分:2)
你必须像Objective-C一样思考。这个声明在翻译成Objective-C时可能意味着什么?特别是[CacheManagerType]
意味着什么?它必须是一个包含CacheManagerType对象的数组,即NSArray。
但那是不可能的。 CacheManagerType是一个枚举。桥接到Objective-C的Int枚举变成了Objective-C枚举。为了使您的方法声明在Objective-C中工作,Objective-C需要能够理解枚举数组的概念 - 而事实并非如此。在Objective-C中,枚举不是对象,但NSArray只能包含对象。