我正在将一个库从 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#?
最佳答案
Func 第一个泛型是返回类型,在您的情况下是 double。你想要的是使用一个 Action :
Action<double, MyCustomView> MyChangeType;
然后你就可以随心所欲地使用它了:
MyChangeType(myProgress, (MyCustomView)this); // good job :)
您可以查看此网页以获得进一步的解释:
http://www.c-sharpcorner.com/blogs/delegate-vs-action-vs-func1
关于c# - 将 Swift 完成闭包转换为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38987250/