2015-10-25 7 views
0

Попытка изучить swift 2.0. Получил этот код, но он терпит неудачу с ошибкой может вызывать и ошибки, а не отмечать try и не обрабатывать ошибку. На линии device.lock ...Как исправить эту ошибку try/guard в swift

func focusTo(value : Float) { 
    if let device = captureDevice { 
     if(device.lockForConfiguration()) { 
      device.setFocusModeLockedWithLensPosition(value, completionHandler: { (time) -> Void in 
       // 
      }) 
      device.unlockForConfiguration() 
     } 
    } 
} 

Что я уверен, что это довольно просто, но может кто-то очертить как именно синтаксис будет выглядеть. Думаю, я должен использовать быструю «стражу» инструкцию идеально, а не пытаться.

+0

вам нужно что-то похожее на то, что я отправил [здесь] (HTTP: //stackoverflow.com/questions/33039138/try-and-catch-error-with-parse-com/33039208#33039208) –

+1

* «Думаю, я должен использовать swi ft "guard" лучше, а не пытаться. "* - Нет. Вы искали документацию по этому методу? * «В Swift этот метод возвращает Void и помечен ключевым словом throws, чтобы указать, что он вызывает ошибку в случаях сбоя. Вы вызываете этот метод в выражении try и обрабатываете любые ошибки в предложениях catch в инструкции do, так как описанный в ... "* + ссылка на соответствующую документацию по обработке ошибок. –

ответ

1

Редактировать: guard только удостоверяет, что device.lockForConfiguration() не возвращает false. Если он выдает ошибки, то она должна быть обернута do - try - catch:

В этом случае lockForConfiguration() не возвращается Bool, так что нет ничего общего с guard.

do { 
    try device.lockForConfiguration() 

    device.setFocusModeLockedWithLensPosition(...) 
    device.unlockForConfiguration() 

} catch let error as NSError { 
    if error.code == 0 { 
     print("Error code: 0") 
    } 
} 

синтаксис:

guard device.lockForConfiguration() else { 
    print("Lock configuration failed!!1") 
    return 
} 

device.setFocusModeLockedWithLensPosition() 
device.unlockForConfiguration() 

Вы даже можете использовать его для замены if:

guard let device = captureDevice else { 
    print("Device is nil!") 
    return 
} 

// Do things with device 
+2

Как это работает? lockForConfiguration() выдает ошибку, как просто поведение маркера бросает вызов. – Sandeep

+1

Первый кодовый блок ошибочен и даже не компилируется. 'lockConfiguration()' вместо 'lockForConfiguration()' является только опечаткой, но этот метод выдает ошибку и должен вызываться в выражении 'try'. –

+0

Да, я сосредоточился на 'guard', потому что OP хочет знать, какой синтаксис следует использовать. Отредактировано для обработки ошибок из метода. – kientux

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