我正在研究为相机输入制作切换开关。我的目标是拥有一个我可以调用的枚举,如CameraPosition.rear
或CameraPosition.front
,相机输入会相应改变。
这是我到目前为止所得到的:
var currentCameraPosition: CameraPosition?
var frontCameraInput: AVCaptureDeviceInput?
var rearCameraInput: AVCaptureDeviceInput?
var currentCameraInput: AVCaptureDeviceInput?
enum CameraPosition {
case front
case rear
func toggle(){
switch self {
case .front:
currentCameraInput = frontCameraInput
case .rear:
currentCameraInput = rearCameraInput
}
}
}
问题是我的编译器抱怨Instance member 'currentCameraInput' cannot be used on type 'Camera'
。我该如何解决这个问题,或者我该如何重写呢?
答案 0 :(得分:2)
如果您愿意,可以完全使用枚举。我建议您使用didSet
进行切换,而不是必须设置CameraPosition
,然后再单独调用toggle
。这样,设置相机位置将自动更新相机输入。我把它设置成这样:
var currentCameraPosition: CameraPosition? {
didSet {
if let position = currentCameraPosition {
switch position {
case .front: currentCameraInput = frontCameraInput
case .rear: currentCameraInput = rearCameraInput
}
}
}
}
var frontCameraInput: AVCaptureDeviceInput?
var rearCameraInput: AVCaptureDeviceInput?
var currentCameraInput: AVCaptureDeviceInput?
enum CameraPosition {
case front
case rear
}
你甚至可以抛弃开关并使用三元运算符,因为你只有2个选项:
var currentCameraPosition: CameraPosition? {
didSet {
if let position = currentCameraPosition {
currentCameraInput = position == .front ? frontCameraInput : rearCameraInput
}
}
}