cocoa - 在 Swift 中转换 NSURL.getResourceValue 返回的数组

标签 cocoa swift casting tags nsurl

我花了一整天的时间试图从 swift 中的 NSURLTagNamesKeyNSURL.getResourceValue 获取可用的结果。该函数应将路径名作为字符串,并返回用户标签的字符串数组。我有一个可以在 Objective C 中运行的版本,但无法在 Swift 中重写。

这是代码的当前版本:

    func listTags(filePath:String)->[String]{
    //convert path string to NSURL
    let theURL : NSURL = NSURL.fileURLWithPath(filePath)!

    //get tags for NSURL -- should be NSArray of NSStrings hiding in an AnyObject?
    var tags : AnyObject?
    var anyError: NSError?
    tags = theURL.getResourceValue(&tags, forKey:NSURLTagNamesKey, error: &anyError)

    //unwrap tags object? This part never works
    let tagArray = tags! as [AnyObject]

    //insert every item in tag array into results array as a String
    var results = [String]()
    for object in tagArray{
        results.append(object as String)
    }

    return results
}

代码可以编译,但在尝试将 AnyObject 转换为任何其他类型时会中断。我尝试了所有我能想到的组合——[AnyObject]、[String]、NSArray,带/不带感叹号和问号。

我正处于放弃 Swift 的边缘。

最佳答案

你会踢自己的......

方法 getResourceValue:forKey:error 返回一个值 - Bool,指示您作为第一个参数传入的容器是否已填充。不幸的是,您正在将此 bool 值分配给 tags - 您的容器! - 这意味着 Cocoa 传入此容器的任何内容都会立即被覆盖。这对我有用...

var tags : AnyObject?
var anyError: NSError?
var success = theURL.getResourceValue(&tags, 
                       forKey:NSURLTagNamesKey, 
                       error: &anyError)
if success {
    println("container contents \(tags as [String])") // -> [AutoLayout, Swift]
}

关于cocoa - 在 Swift 中转换 NSURL.getResourceValue 返回的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28254410/

相关文章:

swift - NSTitlebarAccessoryView 中 NSTextField 的 IBOutlet

objective-c - 另一个 IKImageView 问题 : copying a region

objective-c - 如何在 Cocoa 中获取 JPEG 图像的压缩系数?

ios - 在 cellForItemAt 中应用时,转换仅适用于 UICollectionView 中的回收 View

swift - 如何通过 lastModifiedUserRecordID 查询 CloudKit?

java - FragmentActivity 强制转换以避免静态引用

swift 无法将类型 'Int' 的值分配给类型 'String'

objective-c - 使用 NSFileManager 访问 mac 共享上的文件

ios - 错误 : Value of type 'AppDelegate?' has no member 'present'

c++ - 什么时候使用 reinterpret_cast 而不违反严格的别名规则?