我的应用程序中有一个loadAlbums方法,该方法使用AssetsLibrary的单例实例加载资产。到目前为止,这是我的代码:

func loadAlbums(){
    let library = IAAssetsLibraryDefaultInstance

    library.enumerateGroupsWithTypes(ALAssetsGroupAll as ALAssetsGroupType,
        usingBlock: {(group:ALAssetsGroup, stop:Bool) in
            if group {
                self.albums.append(group)
            }
            else {
                self.tableView.performSelectorOnMainThread("reloadData", withObject: nil, waitUntilDone: true)
            }
        }, failureBlock: { (error:NSError) in println("Problem loading albums: \(error)") })

}


我遇到的错误是在usingBlock行的开头。编译器说:

ALAssetsGroup! is not a subtype of 'ALAssetsGroup'

这是什么意思?我该如何解决?

最佳答案

您的代码块期望ALAssetsGroup参数使用group,但是正在传递类型为ALAssetsGroup!的参数(一个隐式解包的可选参数)。

最大的区别是,您要传递的值可以为nil,但是期望的类型不能为nil

只需将您的签名更改为

{(group:ALAssetsGroup!, stop:Bool) in
  …
}


您的代码已经在检查group是否为nil,因此这应该是您需要进行的唯一更改

关于closures - ALAssetsGroup!不是“ALAssetsGroup”的子类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24125317/

10-09 10:11