在 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.device
为nil
时,会得到异常
隐式解包可选基本上是一个可选,在你使用它的任何地方都会得到一个 !
。就是这样。
例如:
//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
.....
当我筛选关于 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.device
为nil
时,会得到异常
隐式解包可选基本上是一个可选,在你使用它的任何地方都会得到一个 !
。就是这样。
例如:
//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
.....