2015-10-25 69 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

相关问题