Ответ 1
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)
}
}