2017-01-20 61 views
-1

我正在使用AVCaptureDeviceInput類,它是Swift中AVFoundation的一部分。 iniitializer拋出一個異常,我想找出異常的原因。應該有一個NSError對象給出信息。雨燕調用API參考文檔是:從Swift 3調用基礎類的Objective-C替代實現

Declaration 
init(device: AVCaptureDevice!) throws 
Parameters 
device 
The device from which to capture input. 
outError 
If an error occurs during initialization, upon return contains an NSError object describing the problem. 

Xcode不是讓我第二個參數給我的電話加入到AVCaptureDeviceInput(device: device!)。在我看來,有關outError參數的文檔是錯誤的。

API參考也有一個Objective-C的定義如下:

Declaration 
- (instancetype)initWithDevice:(AVCaptureDevice *)device 
        error:(NSError **)outError; 
Parameters 
device 
The device from which to capture input. 
outError 
If an error occurs during initialization, upon return contains an NSError object  describing the problem. 
Return Value 
An input initialized to use device. 

我見過的示例代碼在線返回的NSError,但它在斯威夫特2.有沒有一種方法我可以得到在Swift 3中?

回答

2

It appears to me that the documentation is wrong about having an outError parameter

那麼,這是沒有錯的。請參閱throws標記?這就是你在Swift中獲取錯誤參數的方法。您必須使用try來調用此初始化程序。如果您嵌入此在do,你在catch錯誤:但

do { 
    let d = try AVCaptureDeviceInput(device:aDevice) 
} catch { 
    print(error) 
} 

,請注意,這不會幫助你,除非框架真的沒有良好的秩序和傳遞一個NSError給你。如果你是崩潰(例如,因爲你想解開nil或類似的東西),你仍然會崩潰。

+0

請參閱我的在線書籍:http://www.apeth.com/swiftBook/ch05.html#_throwing_and_catching_errors討論如何對應Objective-C錯誤:(NSError **)outError'結構該部分的結尾。 – matt