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