簡體   English   中英

Xcode 9.0中的iOS 11.1功能

[英]iOS 11.1 feature in Xcode 9.0

(這是基於一個問題: https//github.com/dokun1/Lumina/issues/44

考慮以下功能:

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' has no member 'builtInTrueDepthCamera' in Xcode 9.0我認為使用#available宏會解決這個問題,但它不能正常工作。

我也試過用這個:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 111000
    if #available(iOS 11.1, *), self.captureDepthData == true {
        deviceTypes.append(.builtInTrueDepthCamera)
    }
#endif

但這會導致錯誤讀取: Expected '&&' or '||' expression Expected '&&' or '||' expression

誰知道該怎么辦?

#available將提升“SDK Level”,以便編譯器允許您在Deployment目標上方使用API​​調用,但它不會阻止編譯器編譯#available范圍內的#available

您需要阻止編譯器編譯這些行,因為編譯器沒有.builtInTrueDepthCamera的定義。 您可以使用#if build配置語句執行此操作。

在這種情況下,您要檢查swift版本4.0.2。 隨Swift 4.0.2一起提供的Xcode 9.1。

#if swift(>=4.0.2)
  if #available(iOS 11.1, *), self.captureDepthData == true {
    deviceTypes.append(.builtInTrueDepthCamera)
  }
#endif

來源: https//www.bignerdranch.com/blog/hi-im-available/#what-it-is-not

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM