我花了整整一天的时间试图从NSURL.getResourceValue迅速获得NSURLTagNamesKey的可用结果。该函数应将路径名作为字符串,并为用户标签返回字符串数组。我有一个可以在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
返回值-a 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]
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句