Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

164
Vistas
Código de refactorización para declaración de caso de dos interruptores

Estoy trabajando en un proyecto rápido y tengo una pregunta para refactorizar mi código.

Estoy escribiendo un código para verificar si un usuario autorizó la autorización de la cámara y el micrófono en la aplicación. Escribí los siguientes códigos, pero supongo (y espero) que puedo refactorizar el código porque creo que el siguiente código no está claro. Entendí la gramática básica de Swift y gradualmente entendí el lenguaje compilado, pero avíseme si hay alguna manera de hacer que esto sea más legible o fácil de escribir.

Lo que quiero hacer aquí es...

  • compruebe si tanto una cámara como un micrófono están autorizados.

  • si ambos están autorizados, muestre View Controller con showNextVC().

  • si ninguno de los elementos está autorizado, mostrar una alerta con showConfigurationAlert

     func checkAuthStatus(){ checkCameraStatus() } func checkCameraStatus() { switch AVCaptureDevice.authorizationStatus(for: .video) { case .notDetermined: print("not Determined") AVCaptureDevice.requestAccess(for: .video) { granted in if granted { print("Now it's granted") } } case .restricted: print("restricted") showConfigurationAlert(for: "camera") case .denied: print("denied") showConfigurationAlert(for: "camera") case .authorized: checkMicrophoneStatus() @unknown default: print("unknown") } } func checkMicrophoneStatus() { switch AVCaptureDevice.authorizationStatus(for: .audio){ case .notDetermined: AVCaptureDevice.requestAccess(for: .audio) { granted in if granted { print("Now it's granted") } } case .restricted: print("restricted") showConfigurationAlert(for: "microphone") case .denied: print("denied") showConfigurationAlert(for: "microphone") case .authorized: print(("authorized")) showNextVC() @unknown default: print("unknown") } }

Lo que hice fue verificar primero la autorización de la cámara en checkAuthStatus y luego, si la cámara está autorizada, activar checkMicrophoneStatus() para verificar la autorización del micrófono. La razón por la que creo que este código no está claro es que solo escribo una función para verificar la autorización de la cámara en la función checkAuthStatus(). Creo que si está claro si puedo escribir algo como

 func checkAuthStatus(){ // check both cameara and microphone is authorized. // if both of them are authorized, show next VC with showNextVC() function. }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede cambiar checkCameraStatus() y checkMicrophoneStatus() para devolver un bool y dentro de checkAuthStatus() cambiar a:

 func checkAuthStatus(){ let cameraAuthorised = checkCameraStatus() let micAuthorised = checkMicrophoneStatus() if (cameraAuthorised && micAuthorised) { showNextVC() } }
over 4 years ago · Santiago Trujillo Denunciar

0

Una forma es agregar un parámetro de cierre onAuthorised a ambas funciones. Las dos funciones checkXXXStatus también tienen mucho en común. No necesitamos duplicar la instrucción switch.

 func checkMediaStatus(type: AVMediaType, deviceName: String, onAuthorised: (() -> Void)?) { switch AVCaptureDevice.authorizationStatus(for: type){ case .notDetermined: AVCaptureDevice.requestAccess(for: type) { granted in if granted { print("Now it's granted") } } case .restricted: print("restricted") showConfigurationAlert(for: deviceName) case .denied: print("denied") showConfigurationAlert(for: deviceName) case .authorized: print(("authorized")) onAuthorised?() @unknown default: print("unknown") } } func checkMicrophoneStatus(onAuthorised: (() -> Void)?) { checkMediaStatus(type: .audio, deviceName: "microphone", onAuthorised: onAuthorised) } func checkCameraStatus(onAuthorised: (() -> Void)?) { checkMediaStatus(type: .video, deviceName: "camera", onAuthorised: onAuthorised) }

Entonces checkAuthStatus se puede escribir como:

 func checkAuthStatus(){ checkCameraStatus { self.checkMicrophoneStatus { self.showNextVC() } } }

También tenga en cuenta que es posible que desee llamar a onAuthorised y showConfigurationAlert en el controlador de finalización de requestAccess . Creo que este es un mejor diseño.

 if granted { print("Now it's granted") onAuthorised?() } else { showConfigurationAlert(for: deviceName) }
over 4 years ago · Santiago Trujillo Denunciar

0

Creo que estás buscando algo como esto:

 let videoStatus = AVCaptureDevice.authorizationStatus(for: .video) let audioStatus = AVCaptureDevice.authorizationStatus(for: .audio) switch (videoStatus, audioStatus) { case (.authorized, .authorized): showNextVC() case (.authorized, _): showConfigurationAlert(for: "microphone") case (_, .authorized): showConfigurationAlert(for: "camera") default: print(videoStatus, audioStatus) }

Puede verificar ambos casos al mismo tiempo y manejar cada uno de ellos como desee.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda