Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

158
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!