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
}