使用Swift在Parse中同步保存

时间:2016-01-13 17:54:02

标签: ios swift parse-platform

使用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无法分辨使用哪个函数:它应该尝试使用处理错误的函数。有没有办法强迫这个,或者我是否错误地调用了这个函数?

2 个答案:

答案 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