c# - 将 Swift 完成闭包转换为 C#

标签 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#?

最佳答案

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/

相关文章:

c# - 如何捕获 "A potentially dangerous Request.Path value was detected from the client (:)"以避免 Web 角色崩溃?

C# 紧凑型框架 : multi thread cause delay?

ios - 转换 [字符串 : AnyObject] to [String: Any]

c# - 有没有办法在 WPF 窗口内托管 DirectX12 应用程序?

c# - 无法捕获htmldocument加载异常

swift - 调试 View 层次结构不呈现 UI

swift - 在 SwiftUI 中对路径进行动画处理之前更新路径

iphone - -[__NSArrayI isEqualToString :]: message sent to deallocated instance

c# - 如何在委托(delegate)中使用字典

c# - 委托(delegate)类的用例