【问题标题】:Synchronous Save in Parse using Swift使用 Swift 在 Parse 中同步保存
【发布时间】:2016-01-13 17:54:01
【问题描述】:

使用 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 似乎无法判断使用哪个函数:它应该尝试使用处理错误的函数。有没有办法强制这样做,还是我错误地调用了函数?

【问题讨论】:

    标签: ios swift parse-platform


    【解决方案1】:

    虽然该功能没有标记为 swift 不可用:

    -(BOOL)save:(NSError **)error
    

    被定义为返回一个布尔值,Swift 实现(抛出)显然没有,所以如果我不希望收到返回值,代码编译得很好,即:

     let operation = NSBlockOperation { () -> Void in
    
            do {
                try rating.save()
            }
            catch let er as NSError {
                error = er
            }
        }
    

    我现在仍然确定如何在不反复试验的情况下确定这一点。

    【讨论】:

      【解决方案2】:

      第一个重载被标记为对 Swift 不可用,因此它不可见。

      第二个重载可用,但正如您自己发现的那样,它需要一个try,因为它返回一个NSError 输出参数。 Cocoa 中的BOOL 返回值用于指示操作是否成功。在 Swift 中,这是通过捕获 NSError 来处理的。这种行为是在(我认为)Swift 2.0 中引入的,并记录在 here

      总而言之,一种 Obj-C 方法

      - (BOOL) doSomething:(NSError**)error {}
      

      映射到以下 Swift 方法

      func doSomething() throws
      

      【讨论】:

      • 我试图找出 ObjectiveC 代码是如何映射到 Swift 语言的,但由于某种原因找不到。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多