NSURLSession 下载任务 - Xamarin iOS F#
NSURLSession Download Task - Xamarin iOS F#
我正在尝试从 F#
中的 C#
Xamarin.IOS 实现以下方法:
NSUrlSession.SharedSession.CreateDownloadTask(Request, (data, response, error) =>
{
if(response == null)
{
Client.FailedWithError(this, error);
}
else
{
Client.ReceivedResponse(this, response, NSUrlCacheStoragePolicy.Allowed);
Client.DataLoaded(this, data);
Client.FinishedLoading(this);
}
});
它基本上是一个带有 completionHandler 的 NSUrlSession
downloadTask
任务。我知道如何实现第一部分,但我不知道完成处理程序的语法是什么,而且我在网上找不到它。这就是我所拥有的:
let session : NSUrlSession = NSUrlSession.SharedSession
let request : NSUrlRequest = NSUrlRequest.FromUrl(url)
let downloadTask : NSUrlSessionDownloadTask = session.CreateDownloadTask(request, ??????)
在 F# 中,您可以使用 fun ... -> ...
语法创建 lambda 函数。就像在 C# 中一样,在大多数情况下,这将自动转换为适当的委托,但如果您需要显式创建委托,则可以使用 MyDelegate(fun ... -> ...)
.
我没有安装 Xamarin iOS,但我的猜测是以下应该有效:
NSUrlSession.SharedSession.CreateDownloadTask(Request, fun data response error ->
if (response = null) then
Client.FailedWithError(this, error)
else
Client.ReceivedResponse(this, response, NSUrlCacheStoragePolicy.Allowed)
Client.DataLoaded(this, data)
Client.FinishedLoading(this)
)
在 F# 中,函数的参数由空格分隔(而不是逗号),除非您显式采用元组,普通委托不应如此。
如果您需要指定重载(因为 F# 无法自动推断),那么您可以使用:
NSUrlSession.SharedSession.CreateDownloadTask
(Request, NSUrlSessionResponse(fun data response error ->
// ...
)
)
假设您要创建的委托是 NSUrlSessionResponse
- 我不确定您调用的是哪个重载,因此您需要检查一下。
我正在尝试从 F#
中的 C#
Xamarin.IOS 实现以下方法:
NSUrlSession.SharedSession.CreateDownloadTask(Request, (data, response, error) =>
{
if(response == null)
{
Client.FailedWithError(this, error);
}
else
{
Client.ReceivedResponse(this, response, NSUrlCacheStoragePolicy.Allowed);
Client.DataLoaded(this, data);
Client.FinishedLoading(this);
}
});
它基本上是一个带有 completionHandler 的 NSUrlSession
downloadTask
任务。我知道如何实现第一部分,但我不知道完成处理程序的语法是什么,而且我在网上找不到它。这就是我所拥有的:
let session : NSUrlSession = NSUrlSession.SharedSession
let request : NSUrlRequest = NSUrlRequest.FromUrl(url)
let downloadTask : NSUrlSessionDownloadTask = session.CreateDownloadTask(request, ??????)
在 F# 中,您可以使用 fun ... -> ...
语法创建 lambda 函数。就像在 C# 中一样,在大多数情况下,这将自动转换为适当的委托,但如果您需要显式创建委托,则可以使用 MyDelegate(fun ... -> ...)
.
我没有安装 Xamarin iOS,但我的猜测是以下应该有效:
NSUrlSession.SharedSession.CreateDownloadTask(Request, fun data response error ->
if (response = null) then
Client.FailedWithError(this, error)
else
Client.ReceivedResponse(this, response, NSUrlCacheStoragePolicy.Allowed)
Client.DataLoaded(this, data)
Client.FinishedLoading(this)
)
在 F# 中,函数的参数由空格分隔(而不是逗号),除非您显式采用元组,普通委托不应如此。
如果您需要指定重载(因为 F# 无法自动推断),那么您可以使用:
NSUrlSession.SharedSession.CreateDownloadTask
(Request, NSUrlSessionResponse(fun data response error ->
// ...
)
)
假设您要创建的委托是 NSUrlSessionResponse
- 我不确定您调用的是哪个重载,因此您需要检查一下。