Objective-C 到 Swift:转换 for 循环的正确方法

Objective-C to Swift: correct way to translate a for-loop

我正在尝试将此代码转换为 swift,但我在 if 语句中不断收到错误,objective-c 代码如下所示:

AVCaptureStillImageOutput *stillImageOutPut;
AVCaptureConnection *videoConnection = nil;

for (AVCaptureConnection *connection in stillImageOutput.connections){
      for (AVCaptureInputPort *port in [connection inputPorts]){
          if ([[port mediaType] isEqual:AVMediaTypeVideo]){
          videoConnection = connection;
          break;
           }
      }
}

我的 Swift 代码如下所示:

let stillImageOutPut = AVCaptureStillImageOutput()

let videoConnection:AVCaptureConnection? = nil

        for connection in stillImageOutPut.connections{
            for port in [connection.inputPorts]{
                if
            }
        }

在 if 语句中我找不到 .mediaType,自动完成显示 descriptiongetMirrormap。我试过以其他方式在 for 循环中转换类型,但我只是不断收到错误。

如有任何关于如何正确创建此 for 循环的建议,我们将不胜感激。

去掉 [connection.inputPorts] 中的括号。这不再是 Objective-C!在 Swift 中,这些括号表示数组,而在 Objective-C 中,它们仅表示消息发送。只需将该行更改为:

for port in connection.inputPorts {

...你的世界会变得更加明亮

还没有测试过,但我认为它应该可以工作:

for connection in stillImageOutPut.connections{
    for port  in connection.inputPorts as [AVCaptureInputPort]{
        let mediaType = port.mediaType;
    }
}

stillImageOutPut.connections 是 Objective-C 中的 NSArray,Swift 中的 Array<AnyObject>。您需要将其转换为 Swift 中的 Array<AVCaptureConnection>。同样,您需要将 connection.inputPorts 转换为 Array<AVCaptureInputPort>.

let stillImageOutPut = AVCaptureStillImageOutput()

var videoConnection:AVCaptureConnection? = nil

for connection in stillImageOutPut.connections as [AVCaptureConnection] {
    for port in connection.inputPorts as [AVCaptureInputPort] {
        if port.mediaType == AVMediaTypeVideo {
            videoConnection = connection
        }
    }
}