如何使用枚举

时间:2018-01-05 21:11:09

标签: ios swift function enums toggle

我正在研究为相机输入制作切换开关。我的目标是拥有一个我可以调用的枚举,如CameraPosition.rearCameraPosition.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'。我该如何解决这个问题,或者我该如何重写呢?

1 个答案:

答案 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
    }
  }
}