3

我正在尝试在我的 Objective-C 项目中实现一些 Swift 框架。我已经设置了所有的 Bridge-Headers,并且还在 swift 类中的函数和类之前编写了 @objc。因此需要执行以下操作,但示例代码在 Swift 中给出:

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

我必须在对象 barView 的 Obj-c 类中执行此代码。我试图这样做,但它不起作用:

[_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
     }
     //...
}

我需要在 Objective-C 类中执行该代码(在 Swift 中给出):

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

如何重写它以使其在 Objective-C 中工作?

4

1 回答 1

2

尝试这个:

[_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: ...]

我希望这有帮助。

于 2017-05-25T00:36:34.197 回答