ios - Swift 如何在编译时解决这个问题?

标签 ios swift subclass

这是我使用 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/

相关文章:

ios - TableView 中的自动布局问题

ios - Restkit 集成到 iOS 项目中

swift - 为什么 Swift 的 String API 中包含 unicode 作为编码?

ios - 强制用户将屏幕旋转为横向(iOS)

ios - 如何在 Controller 的 subview Controller 中为按钮添加目标

ios - iOS 上的 GMP 使用 gmp4osx

objective-c - 如何将数组对象输入NSMutableArray?

swift - 向谷歌表单发出 POST 请求

java - 错误: Constructor A in class A cannot be applied to given types

java - 在 Java 中克隆子类