Martin's answer絕對允許您訪問您的對象的屬性,但強制強制轉換。不管喜不喜歡,斯威夫特強大的類型系統都是未來。從返回請求返回結果時,可以考慮測試類型。
func executeFetchRequestT<T:AnyObject>(request:NSFetchRequest, managedObjectContext:NSManagedObjectContext, error: NSErrorPointer = nil) -> [T]? {
var localError: NSError? = nil
if let results:[AnyObject] = managedObjectContext.executeFetchRequest(request, error: &localError) {
if results.count > 0 {
if results[0] is T {
let casted:[T] = results as [T]
return .Some(casted)
}
if error != nil {
error.memory = NSError(domain: "error_domain", code: 0, userInfo: [NSLocalizedDescriptionKey: "Object in fetched results is not the expected type."])
}
} else if 0 == results.count {
return [T]() // just return an empty array
}
}
if error != nil && localError != nil {
error.memory = localError!
}
return .None
}
使用此方法,您可以輸入結果並在類型不正確時得到錯誤。
var fetchError:NSError? = nil
if let results:[Users] = executeFetchRequestT(fetchRequest, managedObjectContext: managedObjectContext, error: &fetchError) {
for user in results {
// access the results with confidence of the correct type
}
} else {
// should have an error condition, handle it appropriately
assertFailure("something bad happened")
}
確實爲結果:在NSDictionary的結果工作?否則,請嘗試使用var resultDict:NSDictionary = result作爲NSDictionary將其在for循環中向下轉換。 – Zhang 2014-10-20 04:36:42