将Swift完成关闭转换为C#

时间:2016-08-17 02:35:44

标签: c# swift delegates closures completionhandler

我将一个库从Swift移植到C#,我在将完成处理程序转换为C#时遇到了问题。

在Swift中我有:

public typealias myChangeHandler = (progress: Double, myView: MyCustomView)

private var myChangeClosure: myChangeHandler?

public func myChangeClosure(_ completion: myChangeHandler) {
    myChangeClosure = completion
}

可以这样调用:

myChangeClosure?(progress: myProgress, view: self)

或者像这样:

localInstance.myChangeClosure() {
    (progress: Double, myView: MyCustomView) in 
    textLabel.text = "\(Int(progress * 100.0))%"
}

在C#中,我尝试过这样的事情:

Func<double, MyCustomView> MyChangeType;

public void MyChangeClosure(Func<double, MyCustomView> completion) 
{
    MyChangeType = completion;
}

我无法使用与Swift类似的语法调用:

MyChangeType(myProgress, (MyCustomView)this); // bad job :'(

我的问题

如何将上面的Swift完成功能转换为C#?

1 个答案:

答案 0 :(得分:3)

Func first generic是返回类型,在你的情况下是double。你想要的是使用一个动作:

Action<double, MyCustomView> MyChangeType;

然后你可以像你想要的那样使用它:

MyChangeType(myProgress, (MyCustomView)this); // good job :)

您可以查看此网页以获得进一步说明:

http://www.c-sharpcorner.com/blogs/delegate-vs-action-vs-func1