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

时间:2015-05-06 05:25:59

标签: xcode swift return avfoundation optional

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

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

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

讨论说这种方法可以返回具有给定媒体类型的默认设备,如果不存在具有该媒体类型的设备,则返回nil。"但是,如果它有可能返回nil,为什么他们在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语句,但因为类defaultDeviceWithMediaType返回一个未包装的变量,为什么需要if let?< / p>

提前非常感谢你。

2 个答案:

答案 0 :(得分:1)

隐式展开的可选项基本上是可选的,在您使用它的任何地方都会获得!。多数民众赞成 e.g:

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

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

隐式展开的可选项只是为了节省您每次使用它时需要展开它,使用if let!,但它具有{{1}的相同选项作为普通的可选项。

Implicitly unwrapped optionals的一个流行用途是使用网点 - 它们可能不是非选项,因为我们不会nil在VC的init中,但我们肯定有它们以后,所以打开它们可以节省我们做init等烦人事情的需要....

答案 1 :(得分:0)

implicitly unwrapped optional仍然是可选的 - 可能是expect(triggerable = double).to receive(:trigger) .with('new_activity', 'Shared') allow(WebsocketRails).to receive(:[]).and_return(triggerable) get :myroute 。如果您只是写nil,当self.device.hasFlashself.device时,您将获得例外。

相关问题