[英]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.