如何使用AnyObject.filter方法?
How can use the AnyObject.filter method?
我尝试使用 AnyObject.filter 方法,但是返回了以下错误:
Contextual type for closure argument list expects 1 argument, which cannot be implicitly ignored.
这是我的代码:
func listCaptureDevices(type: String?) -> [AnyObject]!
{
// Initialize capture session
let captureSession = AVCaptureSession()
// List all capture devices
captureSession.sessionPreset = AVCaptureSessionPresetLow
let devices = AVCaptureDevice.devices()
if type == nil
{
return devices
}
// Filter by device type
return devices.filter() {
if (device.hasMediaType(type == "audio" ? AVMediaTypeAudio : AVMediaTypeVideo))
{
return true
}
}
}
我观察到 AnyObject 接受谓词作为参数,但是在 Swift 示例中我观察到可以使用闭包(带有整数数组的示例)。
return devices.filter() {device in
if (device.hasMediaType(type == "audio" ? AVMediaTypeAudio : AVMediaTypeVideo))
{
return true
}
return false
}
首先,AnyObject
没有 filter
方法。该方法在 SequenceType
上。
你的代码有很多问题;我们将介绍它们。
return devices.filter() {
虽然这在技术上可行,但您不希望此处出现 ()
。它只会造成混乱。你的意思是:
return devices.filter {
您的下一个问题是您引用了未声明的 device
。您可能打算将 device in
添加到闭包中。或者,您可以将元素引用为 [=19=]
.
最后,您的闭包在 false 情况下没有 return 任何东西。你总是需要return一些东西。
您可以将所有这些简化为:
return devices.filter {
[=12=].hasMediaType(type == "audio" ? AVMediaTypeAudio : AVMediaTypeVideo)
}
我尝试使用 AnyObject.filter 方法,但是返回了以下错误:
Contextual type for closure argument list expects 1 argument, which cannot be implicitly ignored.
这是我的代码:
func listCaptureDevices(type: String?) -> [AnyObject]!
{
// Initialize capture session
let captureSession = AVCaptureSession()
// List all capture devices
captureSession.sessionPreset = AVCaptureSessionPresetLow
let devices = AVCaptureDevice.devices()
if type == nil
{
return devices
}
// Filter by device type
return devices.filter() {
if (device.hasMediaType(type == "audio" ? AVMediaTypeAudio : AVMediaTypeVideo))
{
return true
}
}
}
我观察到 AnyObject 接受谓词作为参数,但是在 Swift 示例中我观察到可以使用闭包(带有整数数组的示例)。
return devices.filter() {device in
if (device.hasMediaType(type == "audio" ? AVMediaTypeAudio : AVMediaTypeVideo))
{
return true
}
return false
}
首先,AnyObject
没有 filter
方法。该方法在 SequenceType
上。
你的代码有很多问题;我们将介绍它们。
return devices.filter() {
虽然这在技术上可行,但您不希望此处出现 ()
。它只会造成混乱。你的意思是:
return devices.filter {
您的下一个问题是您引用了未声明的 device
。您可能打算将 device in
添加到闭包中。或者,您可以将元素引用为 [=19=]
.
最后,您的闭包在 false 情况下没有 return 任何东西。你总是需要return一些东西。
您可以将所有这些简化为:
return devices.filter {
[=12=].hasMediaType(type == "audio" ? AVMediaTypeAudio : AVMediaTypeVideo)
}