gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 00:52:19 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com