Swift 2出错:无法指定类型' [NSURL]'的值类型为' [NSURL]'

时间:2015-07-16 16:40:56

标签: swift swift2

我有一个名为downloadedPhotoURLs的变量[NSURL]?

我尝试分配返回类型[NSURL]的函数的结果(非可选)。

我在分配时解包变量downloadedPhotoURLs!

我收到错误:

  

无法指定类型' [NSURL]'的值类型为' [NSURL]'

我不知道如何解决这个问题。

我正在使用Xcode 7测试版(仅因为我必须能够在设备上运行它,但我有免费帐户)

do {
    downloadedPhotoURLs! = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(directoryURL, includingPropertiesForKeys: nil, options: nil)
    collectionView!.reloadData()
} catch _ {
    downloadedPhotoURLs = nil
}

1 个答案:

答案 0 :(得分:1)

那里有两个问题......

强行展开downloadedPhotoURLs!

您不能以这种方式分配。如果变量类型是可选的,那么您将以通用方式分配它,例如,如果它不是可选的,...

downloadedPhotoURLs = ...

当您想要读取/访问值时,将使用展开(!,...)。不是在您想要分配新值时。你在线上正确地做到了:

downloadedPhotoURLS = nil

Swift 2.0中的OptionSetType

您无法在nil参数中传递options:。这种方法的签名是:

func contentsOfDirectoryAtURL(url: NSURL,
  includingPropertiesForKeys keys: [String]?,
  options mask: NSDirectoryEnumerationOptions) throws -> [NSURL]

NSDirectoryEnumerationOptions是:

struct NSDirectoryEnumerationOptions : OptionSetType {
    init(rawValue: UInt)

    static var SkipsSubdirectoryDescendants: NSDirectoryEnumerationOptions { get }    
    static var SkipsPackageDescendants: NSDirectoryEnumerationOptions { get }   
    static var SkipsHiddenFiles: NSDirectoryEnumerationOptions { get }
}

所以看起来应该是这样的:

downloadedPhotoURLs = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(NSURL(string: "")!,
  includingPropertiesForKeys: nil,
  options:NSDirectoryEnumerationOptions(rawValue: 0))

有关OptionSetType的更多信息(Swift 2.0引入)。