无法确定如何在swift中进行以下调用:
var anyError: NSError? = nil
var rsrc: NSNumber? = nil
var success = url.getResourceValue(&rsrc, forKey:NSURLIsUbiquitousItemKey, error:&anyError)
Run Code Online (Sandbox Code Playgroud)
以上不编译:
Cannot convert the expression's type 'Bool' to type 'inout Bool'
Run Code Online (Sandbox Code Playgroud)
所以我尝试了这个:
var anyError: NSError? = nil
var rsrc: AutoreleasingUnsafePointer<AnyObject?> = nil
var success = url.getResourceValue(rsrc, forKey:NSURLIsUbiquitousItemKey, error:&anyError)
Run Code Online (Sandbox Code Playgroud)
但这会产生EXC_BAD_ACCESS
运行时错误.
如何将预期的第一个arg传递给AutoreleasingUnsafePointer<AnyObject?>
(根据doc指向一个布尔NSNumber),然后能够检查其预期的Bool值?
dre*_*wag 29
您需要创建rsrc
一个可选的AnyObject并通过引用传递它,如下所示:
var anyError: NSError?
var rsrc: AnyObject?
var success = url.getResourceValue(&rsrc, forKey:NSURLIsUbiquitousItemKey, error:&anyError)
Run Code Online (Sandbox Code Playgroud)
注意:您不需要将Optionals初始化为nil,默认情况下它们设置为nil.
如果您想检查该值是否为NSNumber,则可以进行转换:
if let number = rsrc as? NSNumber {
// use number
}
Run Code Online (Sandbox Code Playgroud)
这是针对Swift 2.0更新的drewag代码
do {
var rsrc: AnyObject?
try element.getResourceValue(&rsrc, forKey: NSURLIsDirectoryKey)
if let number = rsrc as? NSNumber {
if number == true {
// do something
}
}
} catch {
}
Run Code Online (Sandbox Code Playgroud)
在swift 3之前的调用不可用/弃用:
所以使用:
var keys = Set<URLResourceKey>()
keys.insert(URLResourceKey.isDirectoryKey)
do{
let URLResourceValues = try fileURL.resourceValues(forKeys: keys)
}catch _{
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5540 次 |
最近记录: |