2015-10-25 50 views
0

試圖學習swift 2.0。得到這個代碼,但它失敗,錯誤可以拋出和錯誤,不標記嘗試,並不處理錯誤。 On line device.lock ...如何在swift中修復此嘗試/保護錯誤

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

我確信這很簡單,但是有人可以精確地概述語法的外觀。思考我應該理想地使用迅速的「守衛」指令,而不是嘗試。

+0

你需要類似的東西是什麼我張貼[這裏](HTTP: //sackoverflow.com/questions/33039138/try-and-catch-error-with-parse-com/33039208#33039208) –

+1

*「以爲我應該用swi英尺「守衛」指令的理想,而不是嘗試。「* - 沒有你查找該方法的文件? *「在Swift中,這個方法返回Void,並用throws關鍵字標記,以表明它在失敗的情況下拋出一個錯誤。你可以在try語句中調用這個方法,並處理do語句的catch子句中的任何錯誤,如描述在......「* +到相關錯誤處理文檔的鏈接。 –

回答

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

相關問題