Swift 4:从Objective-C-Object读取数据



我在Swift4中有一个应用程序,其中集成了一些Objective-C对象和桥接头。这可以很好地将数据发送到带有通知的swift部分。我想从rCNCViewController中的swift函数中从其Objective-C对象AVR获取数据。该类有一个实例变量motorsteps,它在wakeFromNib中初始化为48,可以在整个类中使用。

swift等级:

class rViewController: NSViewController, NSWindowDelegate
{
}

子类:

class rCNCViewController:rViewController
{
...

var AVR = rAVRview()
...

Objective-C部分中的类:

@interface rAVRview:NSViewController <NSTableViewDataSource,NSTableViewDelegate>
{
...
IBOutlet   id       xy;
...
}
// variables
...
int motorsteps;
...
@end 

在AVR中获取功能:

- (int)motorsteps
{
return motorsteps;
}

swift部分调用功能:

guard let steps:Int32 = AVR?.motorsteps()  else {return}

返回的steps值为0。观察调试器中对AVR的函数调用,可以发现AVR中的motorsteps为0。AVR的其他对象都是0x00。

motorsteps()更改为返回常数值将正确返回该值。

在来自swift部分的调用之后,AVR中的变量motorsteps的值不变48。为什么来自swift部分的调用中的AVR对象无效?

awakeFromNib仅在从XIB或Storyboard文件加载对象时调用。您正在使用init创建AVR

var AVR = rAVRview()

在这种情况下,您不应该期望调用AVR的awakeFromNib。如果您使用的是情节提要(或独立的XIB(,则需要将其定义为@IBOutlet,并在情节提要编辑器中进行连接。如果手动创建这些视图,则需要在initWithFrame:(或潜在的init:(中初始化它们,而不是在awakeFromNib中初始化。

最新更新