Swift 3 'Any' 类型的值没有成员 'valueForKey'
Swift 3 Value of type 'Any' has no member 'valueForKey'
我正在 Xcode 8 中使用 Swift 3.0 编写核心数据测试程序。问题是当我尝试从 NSManagedObject 接收任何数据时,如下所示:
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Entity")
request.returnsObjectsAsFaults = false
do {
let entityTableInCoreData = try newPrivateQueueContext.fetch(request)
for i in entityTableInCoreData {
if let a = i.valueForKey("b") as? String {
print(a)
}
}
} catch {
}
行
if let a = i.valueForKey("b") as? String {
标有错误
Value of type 'Any' has no member 'valueForKey'
那么问题来了如何从type Any中获取单条记录数据呢?
P.S。如果可能的话,不要转换为 AnyObject 类型,因为它会导致这个
if let a = (i as AnyObject).value("b") as? String {
其中也有错误:
Cannot invoke 'value' with an argument list of type '(String)'
而且我想以适当的方式进行。
谢谢!
更新
我找到了一个解决方案(感谢 Vadian),但我怀疑它是否正确:
do {
let entityTableInCoreData = try newPrivateQueueContext.fetch(request)
for i in entityTableInCoreData {
print("Record")
//print(i)
if let a = i as? NSManagedObject {
print("a: \(a.value(forKey: "a"))")
}
}
} catch {
}
我仍在寻找正确的方法。
fetch
returns [Any]
。您需要将类型向下转换为实际类型,在本例中为 [NSManagedObject]
.
let entityTableInCoreData = try newPrivateQueueContext.fetch(request) as! [NSManagedObject]
强制向下转换是安全的,因为根据获取请求可以保证 return 类型是 NSManagedObject
。
我正在 Xcode 8 中使用 Swift 3.0 编写核心数据测试程序。问题是当我尝试从 NSManagedObject 接收任何数据时,如下所示:
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Entity")
request.returnsObjectsAsFaults = false
do {
let entityTableInCoreData = try newPrivateQueueContext.fetch(request)
for i in entityTableInCoreData {
if let a = i.valueForKey("b") as? String {
print(a)
}
}
} catch {
}
行
if let a = i.valueForKey("b") as? String {
标有错误
Value of type 'Any' has no member 'valueForKey'
那么问题来了如何从type Any中获取单条记录数据呢? P.S。如果可能的话,不要转换为 AnyObject 类型,因为它会导致这个
if let a = (i as AnyObject).value("b") as? String {
其中也有错误:
Cannot invoke 'value' with an argument list of type '(String)'
而且我想以适当的方式进行。 谢谢!
更新
我找到了一个解决方案(感谢 Vadian),但我怀疑它是否正确:
do {
let entityTableInCoreData = try newPrivateQueueContext.fetch(request)
for i in entityTableInCoreData {
print("Record")
//print(i)
if let a = i as? NSManagedObject {
print("a: \(a.value(forKey: "a"))")
}
}
} catch {
}
我仍在寻找正确的方法。
fetch
returns [Any]
。您需要将类型向下转换为实际类型,在本例中为 [NSManagedObject]
.
let entityTableInCoreData = try newPrivateQueueContext.fetch(request) as! [NSManagedObject]
强制向下转换是安全的,因为根据获取请求可以保证 return 类型是 NSManagedObject
。