在 Swift 中返回一个未包装的可选?

Returning an Unwrapped Optional in Swift?

当我筛选关于 AVFoundation 的一些 class 讨论时,我偶然发现了以下内容:

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

因为可选项对我来说是一个新概念,所以我有点困惑。

讨论说这个方法可以 return "the default device with the given media type, or nil if no device with that media type exists." 但是,如果它有可能 return 为零,为什么他们在 return声明?不应该是AVCaptureDevice?

然后,在查看使用上述方法的示例时,我发现以下内容:

 public lazy var device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)


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

据我所知,当你有一个可选的时候,你会使用一个 if let 语句,但是因为 class defaultDeviceWithMediaType return 是一个未包装的变量,为什么有必要 if let 吗?

在此先感谢您。

implicitly unwrapped optional 仍然是可选的 - 它可能是 nil。如果单纯写self.device.hasFlash,当self.devicenil时,会得到异常

隐式解包可选基本上是一个可选,在你使用它的任何地方都会得到一个 !。就是这样。
例如:

//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.....