又名 'NSString' 没有成员 - 斯威夫特

Posted

技术标签:

【中文标题】又名 \'NSString\' 没有成员 - 斯威夫特【英文标题】:aka 'NSString' has no member - Swift又名 'NSString' 没有成员 - 斯威夫特 【发布时间】:2018-01-28 21:36:53 【问题描述】:

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

类型“AVMediaType”(又名“NSString”)没有成员“视频”

类型“AVMetadataObject.ObjectType”(又名“NSString”)没有成员“qr”

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

但是,the sample project I've been following 使用与我相同的代码完美构建。

这是我的代码第一部分的示例:

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
        

有谁知道是什么原因造成的以及如何解决?

【问题讨论】:

从您的代码中删除 @available(iOS 10.0, *) 并更改您在 IB 和捕获设备中的部署目标 AVCaptureDevice.default(for: .video) @LeoDabus 您是否建议用它替换以“let deviceDiscoverySession”开头的整行? 是的,只需获取默认相机。我也会选择一个更好的命名do guard let captureDevice = AVCaptureDevice.default(for: .video), case let input = try AVCaptureDeviceInput(device: captureDevice) else return // code ... catch print(error) return 看起来不错,但您能澄清一下“更改 IB 中的部署目标”是什么意思吗?留下完整的答案,以便我将其标记为正确! dropbox.com/s/l7y4h3qjatledh1/… 【参考方案1】:

修好了!

解决方案不是videoAVMediaType 的属性,AVMediaTypeVideo 是它自己的东西。在 iOS 10.2 及更高版本中将其用于 Swift 4。

【讨论】:

【参考方案2】:

您的部署目标类似于iOS 10.0AVMediaTypeAVLayerVideoGravity 可从 iOS 11 获得。您应该增加您的部署目标或使用较旧的替代方案,例如 AVMediaTypeVideo

【讨论】:

【参考方案3】:

针对 Swift 4.x 进行如下修复

改变

AVMediaType.video

AVMediaTypeVideo

【讨论】:

以上是关于又名 'NSString' 没有成员 - 斯威夫特的主要内容,如果未能解决你的问题,请参考以下文章

类型“UIPageViewController.OptionsKey”(又名“NSString”)没有成员“interPageSpacing”

如何修复:无法将“CLLocationDegrees”(又名“Double”)类型的值分配给“Float!”在斯威夫特 3

斯威夫特:'(字符串)-> AnyObject?没有名为“下标”的成员

斯威夫特 2:任何对象?不能转换为 NSString

从'NSInteger'(又名'int')分配给'NSString *'的不兼容整数到指针转换;

不兼容的指针类型将“NSString *”发送到“NSInteger *”类型的参数(又名“int *”)