Доступ к функции Swift для объекта из класса Objective-C

Я пытаюсь внедрить некоторые Swift-фреймворки в мой проект Objective-C. Я уже настроил все Bridge-Headers и также написал @objc перед функциями и классами в быстром классе. Поэтому необходимо сделать следующее, но пример кода приведен в Swift:

barView.addBarBackground(startAngle: 90, endAngle: -270, radius: 100, width: 15)

Я должен выполнить этот код в классе Obj-C для объекта barView. Я пытался сделать это, но это не работает:

[_barView.addBarBackground startAngle: 90 endAngle: -270 radius: 100 width: 15];

Что я должен делать?

РЕДАКТИРОВАТЬ:

У меня есть соединение IBOutlet:

@property (strong) IBOutlet OGCircularBarView *barView;

Итак, есть объект с именем barView. У меня также есть некоторый Swift-класс с кодом:

import Cocoa

@objc public class OGCircularBarView: NSView, Sequence {
     //...
     @objc public func addBarBackground(startAngle: CGFloat, endAngle: CGFloat, radius: CGFloat, width: CGFloat, color: NSColor) {
        //some code
     }
     //...
}

Мне нужно выполнить этот код (который приведен в Swift) в классе Objective-C:

barView.addBarBackground(startAngle: 90, endAngle: -270, radius: 100, width: 15)

Как я могу переписать его так, чтобы он работал в Objective-C?

1 ответ

Решение

Попробуй это:

[_barView addBarBackgroundStartAngle: 90 endAngle: -270 radius: 100 width: 15];

Первая проблема заключается в том, что вы не можете использовать точечный синтаксис для методов; вот для чего скобки: [object message:withArguments:...]

Во-вторых, имя функции Swift немного неудобно для перевода в Obj-C. Если вы объявите функцию swift следующим образом:

func addBarBackgroundWithStartAngle(_ startAngle: Type, endAngle: Type...

... это будет переведено на более легкий для чтения:

[_barView addBarBackgroundWithStartAngle: endAngle: ...]

Надеюсь, это поможет.

Другие вопросы по тегам