2016-01-13 4 views
2

Использование Swift 2.1 (Xcode 7.2.) И Parse 1.12.0, я получаю сообщение об ошибке, что PFObject.save() недоступен в Swift. Мой код:Синхронное сохранение в анализе с использованием 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

Хотя функция не помечается как недоступная для быстро:

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

определяется возвращать логическое значение, Свифт реализация (которая бросает) по-видимому, не происходит, поэтому код компилируется нормально, если я не ожидал для получения возвращаемого значения, то есть:

let operation = NSBlockOperation {() -> Void in 

     do { 
      try rating.save() 
     } 
     catch let er as NSError { 
      error = er 
     } 
    } 

Я все еще сейчас уверен, как я мог бы определить это без проб и ошибок.

1

Первая перегрузка отмечена как недоступная для Swift, поэтому она не видна.

Вторая перегрузка сделана доступной, но, как вы обнаружили, она требует try, так как она возвращает выходной параметр NSError. Возвращаемое значение BOOL в Cocoa указывает, была ли операция успешной или нет. В Swift это обрабатывается, вместо этого перехватывая NSError. Такое поведение было введено в (я думаю) Swift 2.0 и зарегистрировано here.

Итак, метод Obj-C

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

карты к следующему Swift методом

func doSomething() throws 
+0

Я пытался найти, как код ObjectiveC было отображение Свифт многословие, но не смог по какой-то причине. благодаря – pickwick

Смежные вопросы