在新的Xcode 12中,当我尝试访问时出现错误:Value of type 'AVCapturePhotoOutput' has no member 'supportedFlashModes'
https://developer.apple.com/documentation/avfoundation/avcapturephotooutput/1648766-supportedflashmodes有什么建议吗?
Xcode 12上似乎有一个错误,但您可以使用宏条件来解决它:
#if !targetEnvironment(simulator)
guard stillImageOutput?.supportedFlashModes.contains(mode) == true else { return }
//rest of your code
#endif
正如@Andy Heard所写:
我们深表歉意。对于使用Swift 3.2或Swift 4.0的应用程序AVFoundation捕获API(外部协议上的公共扩展(在Xcode 9中被无意地标记为私有。
以下AVFoundation API暂时不可用:
AVCaptureDevice.Format.supportedColorSpaces
AVCaptureDevice.supportedFlashModes
AVCapturePhotoOutput.availablePhotoPixelFormatTypes
AVCapturePhotoOutput.availableRawPhotoPixelFormatTypes
AVCapturePhotoSettings.availablePreviewPhotoPixelFormatTypes
作为一种解决方法,您可以通过以下方式使用这些API的SwiftPrivate版本在每个API前面加上双下划线(
__
(。例如,更改AVCaptureDevice.Format.supportedColorSpaces
至AVCaptureDevice.Format.__supportedColorSpaces
。
对于XCode 12回归(叹息(,您可以使用类似的__版本
var flashModesSupported: [AVCaptureDevice.FlashMode] {
#if targetEnvironment(simulator)
return self.photoOutput.__supportedFlashModes.compactMap { AVCaptureDevice.FlashMode.init(rawValue: $0.intValue) }
#else
return self.photoOutput.supportedFlashModes
#endif
}
有一份报告没有触发SPI(因此,可以安全地提交到应用商店(
你可以试试这个:
let device2 = AVCapturePhotoOutput()
if (device2.supportedFlashModes.contains(.auto)){
} else {
}