使用Swift 2.1(Xcode 7.2。)和Parse 1.12.0,我收到一个错误,PFObject.save()在Swift中不可用。我的代码是:
let operation = NSBlockOperation { () -> Void in
do {
let success = try rating.save()
}
catch let er as NSError {
error = er
}
}
在PFObject + Synchronous.h中,有这样的:
///--------------------------------------
#pragma mark - Saving Objects
///--------------------------------------
/**
*Synchronously* saves the `PFObject`.
@return Returns whether the save succeeded.
*/
- (BOOL)save PF_SWIFT_UNAVAILABLE;
/**
*Synchronously* saves the `PFObject` and sets an error if it occurs.
@param error Pointer to an `NSError` that will be set if necessary.
@return Returns whether the save succeeded.
*/
- (BOOL)save:(NSError **)error;
所以似乎Xcode无法分辨使用哪个函数:它应该尝试使用处理错误的函数。有没有办法强迫这个,或者我是否错误地调用了这个函数?
答案 0 :(得分:2)
虽然函数未标记为swift不可用:
-(BOOL)save:(NSError **)error
被定义为返回一个bool,Swift实现(抛出)显然没有,所以如果我不期望收到返回值,代码编译得很好,即:
let operation = NSBlockOperation { () -> Void in
do {
try rating.save()
}
catch let er as NSError {
error = er
}
}
我现在仍然确定如何在没有反复试验的情况下确定这一点。
答案 1 :(得分:1)
第一个重载标记为Swift不可用,因此它不可见。
第二个重载可用,但正如您自己发现的那样,它需要try
,因为它返回NSError
输出参数。 Cocoa中的BOOL
返回值用于指示操作是否成功。在Swift中,这是通过捕获NSError
来处理的。这种行为是在(我认为)Swift 2.0中引入的,并且记录在案here。
总结一下,Obj-C方法
- (BOOL) doSomething:(NSError**)error {}
映射到以下Swift方法
func doSomething() throws