2015-05-06 16 views
1

當我通過一些針對AVFoundation的課堂討論的篩選,我偶然發現了以下內容:在Swift中返回一個Unwrapped Optional?

class func defaultDeviceWithMediaType(mediaType: String!) -> AVCaptureDevice! 

因爲自選項目是一個新的概念對我來說,我有點糊塗了。

討論中說,此方法可以返回「給定媒體類型的默認設備,或者如果沒有設備具有該媒體類型,則返回零。」但是,如果有可能返回零,爲什麼在返回語句中打開這個可選項?它不應該是AVCaptureDevice?

然後,望着利用上述方法的例子的時候,我發現以下:

public lazy var device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) 


public func hasFlash() -> Bool { 
    if let d = self.device { 
     return d.hasFlash 
    } 
    return false 
} 

據我瞭解,你會當你有一個使用if let聲明可選,但因爲類defaultDeviceWithMediaType返回一個未包裝的變量,爲什麼需要if let

非常感謝你提前。

回答

1

隱式解包可選基本上是一個可選項,在你使用它的任何地方都會得到一個!。而已。
如:

//this: 
var number: Int? = ... 
print(number!) 

//is the same as this: 
var number: Int! = ... 
print(number) 

一個隱含解開可選只是爲了節省您每次使用它的時候展開它的需要,羯羊與if let或用!,但它的存在nil爲同一期權正常可選。

一個流行的使用隱式展開自選的是網點 - 他們不能是無自選,因爲我們沒有init他們在VC的init,但我們肯定有他們後面,所以讓他們展開拯救我們需要做煩人的事情,如if let table = self.tableView ....