2016-07-28 47 views

Antwort

2

NSURL Ein Objekt hat eine Ressource für Schlüssel NSURLTagNamesKey. Der Wert ist ein Array von Strings.

Dieses schnelle Beispiel liest die Tags, fügt das Tag Foo hinzu und schreibt die Tags zurück.

let url = NSURL(fileURLWithPath: "/Path/to/file.ext") 
var resource : AnyObject? 
do { 
    try url.getResourceValue(&resource, forKey: NSURLTagNamesKey) 
    var tags : [String] 
    if resource == nil { 
    tags = [String]() 
    } else { 
    tags = resource as! [String] 
    } 

    print(tags) 
    tags += ["Foo"] 
    try url.setResourceValue(tags, forKey: NSURLTagNamesKey) 
} catch let error as NSError { 
    print(error) 
} 

Die Swift 3+ Version ist ein bisschen anders. In URL ist die tagNames Eigenschaft get-nur so werfen zu überbrücken, ist es notwendig, die URL zu Foundation NSURL

var url = URL(fileURLWithPath: "/Path/to/file.ext") 
do { 
    let resourceValues = try url.resourceValues(forKeys: [.tagNamesKey]) 
    var tags : [String] 
    if let tagNames = resourceValues.tagNames { 
     tags = tagNames 
    } else { 
     tags = [String]() 
    } 

    tags += ["Foo"] 
    try (url as NSURL).setResourceValue(tags, forKey: .tagNamesKey) 

} catch { 
    print(error) 
} 
+0

Great! Du hast viel geholfen. Vielen Dank. – arsena

+0

Hallo nochmal. Gibt es eine Methode, um ein vorhandenes Tag zu entfernen? wie removeResourceValue oder etwas? – arsena

+1

Verwenden Sie 'setResourceValue' mit einem leeren Array oder wenn Sie möchten, dass andere den Wert aus dem Array entfernen und zurückschreiben. – vadian

1

@ Vadian Antwort in Swift 4,0
('NSURLTagNamesKey' has been renamed to 'URLResourceKey.tagNamesKey')

let url = NSURL(fileURLWithPath: "/Path/to/file.ext"") 
var resource : AnyObject? 
do { 
    try url.getResourceValue(&resource, forKey: URLResourceKey.tagNamesKey) 
    var tags : [String] 
    if resource == nil { 
     tags = [String]() 
    } else { 
     tags = resource as! [String] 
    } 

    print(tags) 
    tags += ["Foo"] 
    try url.setResourceValue(tags, forKey: URLResourceKey.tagNamesKey) 
} catch let error as NSError { 
    print(error) 
}