这是我使用 Swift 编码的第二天,所以我很新。我在网上获得了以下代码,该代码使用 Apple API 枚举 iOS 设备上的音频/视频设备:
let devices = AVCaptureDevice.devices()
// Loop through all the capture devices on this phone
for device in devices {
// Make sure this particular device supports video
if (device.hasMediaType(AVMediaTypeVideo)) {
...
}
}
现在,如果我查找 AVCaptureDevice.devices()
返回的内容,我会在 Apple 文档中找到:
class func devices() -> [AnyObject]!
所以这肯定意味着设备是 AnyObject
类型(一种非常通用的类型),并且我猜是高度特化的调用 device.hasMediaType
(...)必须在一些更专门的子类中实现是不可能的。我预计会出现一个错误,即 AnyObject
没有名为 hasMediaType
的函数(我很确定它没有)。
那么为什么这会起作用呢?即使自动完成似乎也为我提供了编辑器中的 hasMediaType()
功能。我的理解是这是不可能的。
最佳答案
AnyObject
表示所有已知的 Objective-C 方法和属性都可用(请参阅 here )。
您会注意到所有内容都是作为自动完成功能提供的。它相当于在 Objective-C 中使用id
。
如果您使用 AVCaptureDevice
未实现的方法,您仍然会获得自动完成功能,但会在运行时崩溃。
Apple 正在尽可能用类型化数组逐步取代所有这些,因此这种歧义最终将被消除。
关于ios - Swift 如何在编译时解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305144/