我正在使用Encrypted Core Data
并希望在初始化时出现错误。标Objective C
头声明:
+(NSPersistentStoreCoordinator *)makeStoreWithStructOptions:(EncryptedStoreOptions *) options managedObjectModel:(NSManagedObjectModel *)objModel error:(NSError * __autoreleasing*)error;
但是,Swift 桥接头将其解释为:
public class func makeStoreWithStructOptions(options: UnsafeMutablePointer<EncryptedStoreOptions>, managedObjectModel objModel: NSManagedObjectModel!, error: ()) throws -> NSPersistentStoreCoordinator
请注意,它请求的是类型的对象()
而不是NSError
.
我试图这样做:
var error: NSError? = nil
EncryptedStore.makeStoreWithOptions(options, managedObjectModel: myModel, error: &error)
但这会导致错误提示类型不正确(并且不能使用&
)
如果我改为尝试(哈哈!)这种语法,使用空闭包作为其奇怪请求的占位符:
do {
try EncryptedStore.makeStoreWithOptions(options, managedObjectModel: myModel, error: {}())
}catch{
print(error)
}
它可以编译,但是当生成错误时,它不会被捕获,尽管 ECD 确实为我记录了错误(但这没有帮助)。尝试, error: {}()
从函数调用中消除会返回一个警告,该函数现在不会抛出,这仍然对我没有帮助。
产生错误的 Objective C 代码是:
[persistentCoordinator addPersistentStoreWithType:EncryptedStoreType configuration:nil URL:databaseURL
options:options error:error];
if (*error)
{
NSLog(@"Unable to add persistent store.");
NSLog(@"Error: %@\n%@\n%@", *error, [*error userInfo], [*error localizedDescription]);
}
return persistentCoordinator;
在这种情况下捕获错误的正确语法是什么?