错误:Swift 3中对成员'下标'的模糊引用

ati*_*rit 4 ios swift3

我下载了Xcode 8 beta并将我的语法转换为Swift 3.当我这样做时,我得到了这段代码的同名错误(之前没有发生):

斯威夫特3:

do {
    let fileAttributes = try FileManager.default().attributesOfItem(atPath: fileURL.path!) // Error here
    let fileSizeNumber = fileAttributes[NSFileSize] as! NSNumber
    fileSize = fileSizeNumber.longLongValue
} catch _ as NSError {
    print("Filesize reading failed")
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特2:

do {
    let fileAttributes = try NSFileManager.defaultManager().attributesOfItemAtPath(fileURL.path!)
    let fileSizeNumber = fileAttributes[NSFileSize] as! NSNumber
    fileSize = fileSizeNumber.longLongValue
} catch _ as NSError {
    print("Filesize reading failed")
}
Run Code Online (Sandbox Code Playgroud)

这是Swift 3中的一个错误,还是我错过了什么?

我知道有很多关于同一错误的问题,但那些不能解决我的问题.我很乐意编辑澄清.

提前致谢!

aya*_*aio 7

我认为这样的事情应该有效:

do {
    let fileAttributes = try FileManager.default().attributesOfItem(atPath: file.path!)
    if let fileSizeNumber = fileAttributes["NSFileSize"] as? NSNumber {
        let fileSize = fileSizeNumber.int64Value

    }
} catch let error as NSError {
    print("Filesize reading failed: \(error.debugDescription)")
}
Run Code Online (Sandbox Code Playgroud)

因为NSFileSize它只是一个常量字符串,所以我用原始值替换它.看起来没问题 - 但是当然找到官方的等价物会更好(我现在没办法,所以不要把这个解决方案视为理所当然,这只是一种解决方法).

Xcode 8 GM更新:

使用FileAttributeKey.size比使用硬编码常量更好(感谢@rudy提醒).这是一个更新的例子:

do {
    let attributes = try FileManager.default.attributesOfItem(atPath: file.path)
    if let size = attributes[FileAttributeKey.size] as? NSNumber {
        let fileSize = size.int64Value
        print(fileSize)
    }
} catch {
    print(error.localizedDescription)
}
Run Code Online (Sandbox Code Playgroud)