Xcode 9.0中的iOS 11.1功能
(这是基于这里的一个问题:) 考虑以下功能:Xcode 9.0中的iOS 11.1功能,ios,swift,xcode,Ios,Swift,Xcode,(这是基于这里的一个问题:) 考虑以下功能: fileprivate var discoverySession: AVCaptureDevice.DiscoverySession? { var deviceTypes = [AVCaptureDevice.DeviceType]() deviceTypes.append(.builtInWideAngleCamera) if #available(iOS 10.2, *) { deviceTypes.app
fileprivate var discoverySession: AVCaptureDevice.DiscoverySession? {
var deviceTypes = [AVCaptureDevice.DeviceType]()
deviceTypes.append(.builtInWideAngleCamera)
if #available(iOS 10.2, *) {
deviceTypes.append(.builtInDualCamera)
}
if #available(iOS 11.1, *), self.captureDepthData == true {
deviceTypes.append(.builtInTrueDepthCamera)
}
return AVCaptureDevice.DiscoverySession(deviceTypes: deviceTypes, mediaType: AVMediaType.video, position: AVCaptureDevice.Position.unspecified)
}
我正在运行Xcode 9.0。我想运行一个在iOS 11.1中使用此功能的框架,它只在Xcode 9.1中可用。此函数中给出错误的代码为:
if #available(iOS 11.1, *), self.captureDepthData == true {
deviceTypes.append(.builtInTrueDepthCamera)
}
当在别人的机器上运行Xcode 9.1时,它运行良好,使用该框架开发的应用程序可以设置10.0的开发目标,并且编译良好。然而,我甚至不能在我的机器上构建框架。我收到的错误读取到Type'AVCaptureDevice.DeviceType'在Xcode 9.0中没有成员'builtInTrueDepthCamera',我认为使用#available
宏可以解决这个问题,但效果不太好
我也尝试过这样做:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 111000
if #available(iOS 11.1, *), self.captureDepthData == true {
deviceTypes.append(.builtInTrueDepthCamera)
}
#endif
但这会导致读取错误:预期的“&&”或“| |”表达式
有人知道该怎么做吗?#available
将提高“SDK级别”,以便编译器允许您在部署目标之上使用API调用,但这不会阻止编译器编译#available
范围内的行
您需要阻止编译器编译这些行,因为编译器没有.builtInTrueDepthCamera的定义。您可以使用#if build configuration语句来实现这一点
在这种情况下,您需要检查swift版本4.0.2。Xcode 9.1随Swift 4.0.2一起提供
#if swift(>=4.0.2)
if #available(iOS 11.1, *), self.captureDepthData == true {
deviceTypes.append(.builtInTrueDepthCamera)
}
#endif
来源:我认为您无法避免编译器错误。实际上,11.0 SDK中没有成员。您最好更新Xcode或使用旧版本的Lumina
。