理解快速类型别名

Posted

技术标签:

【中文标题】理解快速类型别名【英文标题】:Understanding swift typealias 【发布时间】:2016-04-28 14:24:31 【问题描述】:

作为照片框架的一部分,有一个从 iCloud 下载照片的选项(如果需要)。问题是我不明白如何使用它。

文档说:

var progressHandler: PHAssetImageProgressHandler?

PHAssetImageProgressHandler 在哪里

照片从 iCloud 下载资产数据时调用的块的签名。由 progressHandler 属性使用。

typealias PHAssetImageProgressHandler = (Double, NSError?, UnsafeMutablePointer<ObjCBool>, [NSObject : AnyObject]?) -> Void

但我不知道如何整合它,有什么建议吗?

更新

我正在使用的请求

      var options: PHImageRequestOptions = PHImageRequestOptions()
      options.networkAccessAllowed = true
        options.progressHandler = PHAssetImageProgressHandler 

        

【问题讨论】:

这是一个闭包,一个回调。您能否举例说明您尝试使用回调的哪个 Photos 框架调用? @JAL ,更新问题 【参考方案1】:

它用作PHImageRequestOptions 类中的闭包,例如传递给PHImageManagerrequestImageForAsset:targetSize:contentMode:options:

语法看起来像

let finalRequestOptions = PHImageRequestOptions()
finalRequestOptions.progressHandler =  (progress, error, stop, info) in
  // do something with the returned parameters

文档说:

如果您请求的图像的数据不在本地设备上,并且您 已使用 networkAccessAllowed 属性启用下载, 照片会定期调用您的区块以报告进度并允许 取消下载。

nshipster上对PHImageManager有很好的描述

【讨论】:

谢谢!对 nshipster 的引用是无价的!​​span> 【参考方案2】:

这意味着每当你看到PHAssetImageProgressHandler时,你实际上应该阅读以下内容:

(Double, NSError?, UnsafeMutablePointer&lt;ObjCBool&gt;, [NSObject : AnyObject]?) -&gt; Void

这是一个将元组(Double, NSError?, UnsafeMutablePointer&lt;ObjCBool&gt;, [NSObject : AnyObject]?)作为参数并返回Void的闭包

编辑:

这也意味着无论何时你想声明一个PHAssetImageProgressHandler,你都应该这样声明:

 let handler : PHAssetImageProgressHandler =  (progress, error, stop, info) in 
   // your code
 

【讨论】:

感谢您的回答艾马克! :)

以上是关于理解快速类型别名的主要内容,如果未能解决你的问题,请参考以下文章

类型别名,auto,decltype

指针常量和类型别名

数据类型的别名

Scala中函数类型的类型别名[关闭]

Typescript 之 快速入门

Typescript 之 快速入门