我将一个库从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#?
答案 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