Swift枚举与Obj-C(或C)枚举非常不同,不能直接传递给Obj-C。
作为解决方法,您可以使用一个Int
参数声明您的方法。
func newsCellDidSelectButton(cell: NewsCell, actionType: Int)
将其作为 NewsCellActionType.Vote.toRaw()
传递。但是您无法从 Obj-C 访问枚举名称,这使得代码更加困难。
更好的解决方案可能是在 Obj-C 中实现枚举(例如,在您的桥接头文件中),因为这样它将自动在 Swift 中访问,并且可以将其作为参数传递。
编辑
不需要添加 @objc
就可将其用于 Obj-C 类。如果您的代码是纯 Swift 的,则可以毫无问题地使用枚举,请参见以下示例:
enum NewsCellActionType : Int {
case Vote = 0
case Comments
case Time
}
protocol NewsCellDelegate {
func newsCellDidSelectButton(cell: UITableViewCell?, actionType: NewsCellActionType )
}
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, NewsCellDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window!.backgroundColor = UIColor.whiteColor()
self.window!.makeKeyAndVisible()
test()
return true;
}
func newsCellDidSelectButton(cell: UITableViewCell?, actionType: NewsCellActionType) {
println(actionType.toRaw());
}
func test() {
self.newsCellDidSelectButton(nil, actionType: NewsCellActionType.Vote)
}
}