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
,自动完成显示 description
、getMirror
和 map
。我试过以其他方式在 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
}
}
}
我正在尝试将此代码转换为 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
,自动完成显示 description
、getMirror
和 map
。我试过以其他方式在 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
}
}
}