ALAssetsGroup!不是'ALAssetsGroup'的子类型

时间:2014-06-09 17:13:10

标签: closures swift ios8

我的应用中有一个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'

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

1 个答案:

答案 0 :(得分:1)

您的块期望ALAssetsGroup参数group,但它传递了一个类型为ALAssetsGroup!的参数(隐式解包的可选项)。

最大的区别在于您传递的值可能为零,但您预期的类型不能为零

只需将您的签名更改为

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

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