Swift 3类型'Any'的值没有成员'valueForKey'
问题描述:
我正在用Xcode 8中的Swift 3.0编写测试程序。问题是,当我尝试从NSManagedObject接收任何数据时,像这样:Swift 3类型'Any'的值没有成员'valueForKey'
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'
所以问题是如何从中获取键入任何单个记录数据? P.S.如果可能的话,没有铸造AnyObject类型,因为它是导致该
if let a = (i as AnyObject).value("b") as? String {
其中也有一个错误:
Cannot invoke 'value' with an argument list of type '(String)'
而且我想这样做的正确方法。 谢谢!
UPDATE
我找到了解决方案(感谢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
返回[Any]
。您需要将类型转换为实际类型,在此例中为[NSManagedObject]
。
let entityTableInCoreData = try newPrivateQueueContext.fetch(request) as! [NSManagedObject]
因为根据*向下转换是安全的获取要求它保证了返回类型为NSManagedObject
。
不,这也是一个错误: – Alex
类型'任何'没有下标成员 – Alex
在哪里做到这一点?获取(请求)为[String:AnyObject] – Alex