2015-05-06 18 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 ....