使用必需的参数将目标C alloc init转换为swift

时间:2015-05-03 21:44:48

标签: objective-c swift

我正在开发一个Swift metawear(mbientlab.com)项目,所有代码示例都在Objective C中,因此必须进行大量转换。在这篇博文后发表了http://projects.mbientlab.com/persistent-events-and-filters/ - 我创建了以下继承自MBLRestorable(实现NSCoder协议)的类:

class DeviceConfiguration:NSObject, MBLRestorable {
var pulseWithEvent:MBLEvent!

func encodeWithCoder(aCoder: NSCoder) {
    aCoder.encodeObject(self.pulseWithEvent, forKey: "pulseWithEvent")
}

required init(coder aDecoder: NSCoder) {
    super.init()

    self.pulseWithEvent = aDecoder.decodeObjectForKey("pulseWithEvent") as MBLEvent
}
}

到目前为止一切顺利。现在我将以下Objective C转换为Swift:

[self.device setConfiguration:[[DeviceConfiguration alloc] init] handler:^(NSError *error) {
if (!error) {
// Programming successful!
}
}];

我试试:

self.device.setConfiguration(MetawearConfig()) { error in

}

但是得到一个错误,它缺少必需的参数“编码器”。让我觉得它需要init上的参数,但是在Objective C示例代码/应用程序中,编码器obj永远不会被传入(并且编译器不会引发相同的错误)。

setConfiguration的声明是:

- (void)setConfiguration:(id<MBLRestorable>)configuration handler:(MBLErrorHandler)handler;

我缺少什么?

2 个答案:

答案 0 :(得分:1)

您正在致电//= require angular-rails-templates //= require_tree . angular.module('d-angular', ['templates']) ,但您提供的唯一MetawearConfig()init。如果您需要非参数init(coder aDecoder: NSCoder),则必须提供一个:

init

答案 1 :(得分:0)

Objective-C中的var table = document.getElementById("table"); var images = table.getElementsByTagName("img"); var canvas = document.getElementById("lines"); var ctx = canvas.getContext("2d"); var x, y; // Remember coordinates canvas.width = table.offsetWidth; canvas.height = table.offsetHeight; function connect( image ) { var im = new Image(); im.onload = function(){ // make sure image is loaded var tabBcr = table.getBoundingClientRect(); var imgBcr = image.getBoundingClientRect(); ctx.beginPath(); ctx.moveTo(x, y); x = imgBcr.left + (image.parentNode.offsetWidth / 2) - tabBcr.left; y = imgBcr.top + (image.parentNode.offsetHeight / 2) - tabBcr.top; ctx.lineTo(x, y); ctx.stroke(); }; im.src = images[i].src; } for(var i=0; i<images.length; i++){ connect( images[i] ); } 也有一个不同的DeviceConfiguration,没有参数,继承自init。您要转换的代码看起来是调用无参数版本而不是NSObject版本。