NSURL getResourceValue в быстрой
Не удалось выяснить, как сделать следующий вызов быстрым:
var anyError: NSError? = nil
var rsrc: NSNumber? = nil
var success = url.getResourceValue(&rsrc, forKey:NSURLIsUbiquitousItemKey, error:&anyError)
Вышеприведенное не компилируется:
Cannot convert the expression type 'Bool' to type 'inout Bool'
Итак, я пробовал это:
var anyError: NSError? = nil
var rsrc: AutoreleasingUnsafePointer<AnyObject?> = nil
var success = url.getResourceValue(rsrc, forKey:NSURLIsUbiquitousItemKey, error:&anyError)
но это приводит к ошибке EXC_BAD_ACCESS
.
Как передать ожидаемый первый arg как AutoreleasingUnsafePointer<AnyObject?>
(который должен указывать на логический NSNumber в соответствии с doc), а затем проверить его ожидаемое значение Bool?
Ответы
Ответ 1
Вам нужно сделать rsrc
необязательный объект AnyObject и передать его по ссылке так:
var anyError: NSError?
var rsrc: AnyObject?
var success = url.getResourceValue(&rsrc, forKey:NSURLIsUbiquitousItemKey, error:&anyError)
Примечание: вам не нужно инициализировать опции с помощью nil, по умолчанию они установлены на нуль.
Если вы хотите проверить, является ли это значение NSNumber, вы можете сделать преобразование:
if let number = rsrc as? NSNumber {
// use number
}
Ответ 2
Здесь приведен код кода для Swift 2.0
do {
var rsrc: AnyObject?
try element.getResourceValue(&rsrc, forKey: NSURLIsDirectoryKey)
if let number = rsrc as? NSNumber {
if number == true {
// do something
}
}
} catch {
}
Ответ 3
в быстрых 3 предыдущих вызовах недоступны/устарели:
поэтому используйте:
var keys = Set<URLResourceKey>()
keys.insert(URLResourceKey.isDirectoryKey)
do{
let URLResourceValues = try fileURL.resourceValues(forKeys: keys)
}catch _{
}
Ответ 4
Если результат getResourceValue (: forKey:) в конечном итоге является логическим значением, вы можете присвоить возвращаемое значение указателя непосредственно значению Bool:
let boolResult = rsrc as! Bool
или просто проверить его как значение Bool без его назначения:
if rsrc as! Bool {
// true code
} else {
// false code
}
или выполните оба варианта:
if let rsrc as! Bool {
// true
} else {
// false
}