Ios aka“NSString”没有成员-Swift

Ios aka“NSString”没有成员-Swift,ios,swift,Ios,Swift,我正在使用Swift 4构建二维码阅读器,遇到了一些问题,尤其是多行上的这些消息: 类型“AVMediaType”又名“NSString”没有成员“video” 类型“AVMetadataObject.ObjectType”aka“NSString”没有成员“qr” 类型“AVLayerVideoGravity”又名“NSString”没有成员没有成员“resizeAspectFill” 但是,使用与我相同的代码完全构建 下面是我代码第一部分的一个示例: import UIKit import

我正在使用Swift 4构建二维码阅读器,遇到了一些问题,尤其是多行上的这些消息:

类型“AVMediaType”又名“NSString”没有成员“video”

类型“AVMetadataObject.ObjectType”aka“NSString”没有成员“qr”

类型“AVLayerVideoGravity”又名“NSString”没有成员没有成员“resizeAspectFill”

但是,使用与我相同的代码完全构建

下面是我代码第一部分的一个示例:

import UIKit
import AVFoundation

@available(iOS 10.0, *)
class ScanViewController: UIViewController {
    
    var captureSession = AVCaptureSession?.self
    var videoPreviewLayer: AVCaptureVideoPreviewLayer?
    
    @IBOutlet weak var previewView: UIView!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Get the back-facing camera for capturing videos
        //***ERROR OCCURRS ON THIS LINE***
        let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInDualCamera], mediaType: AVMediaType.video, position: .back)
        
        guard let captureDevice = deviceDiscoverySession.devices.first else {
            print("Failed to get the camera device")
            return
        }
有人知道是什么导致了它,以及如何修复它吗?

修复了它


解决方案不是将视频作为AVMediaType的属性,而是将AVMediaType视频作为自己的东西。将其用于iOS 10.2及更高版本中的Swift 4。

您的部署目标看起来像iOS 10.0。iOS 11提供AVMediaType和AVLayerVideoGravity。您应该增加部署目标,或者使用旧的替代方案,如AVMediaTypeVideo,对Swift 4.x进行如下修复

改变

AVMediaType.video


从代码中删除@availableiOS 10.0,*并更改IB中的部署目标以及捕获设备AVCaptureDevice.defaultfor:。video@LeoDabus您是否建议更换从let deviceDiscoverySession开始的整条线?是的,只需使用默认摄像头即可。我会选择一个更好的命名方法,也可以{guard let captureDevice=AVCaptureDevice.defaultfor:。视频,case let input=try AVCaptureDeviceInputdevice:captureDevice else{return}//code…}catch{printerror return}看起来不错,但是,您能否澄清在IB中更改部署目标是什么意思?留下完整的答案,这样我就可以把它标记为正确!
AVMediaTypeVideo