2017-01-26 2 views
-1

Мне нужно получить доступ к значению переменной в если утверждение, это мой код:Доступ к значению переменной, если оператор

var codeError : Int? 

@IBAction func mySwitch(_ sender: UISwitch) { 
    if sender.isOn { 
     codeError = 1 
    } else { 
     codeError = 2 
    } 
} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    if codeError == 1 { 
     front() 
    } else if codeError == 2 { 
     back() 
    } 

} 

Мои две функции, это моя функция фронт(): функция

func front() { 

    let deviceDiscoverySession = AVCaptureDeviceDiscoverySession(deviceTypes: [AVCaptureDeviceType.builtInDualCamera, AVCaptureDeviceType.builtInTelephotoCamera,AVCaptureDeviceType.builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: AVCaptureDevicePosition.unspecified) 

    for device in (deviceDiscoverySession?.devices)! { 


     if device.position == AVCaptureDevicePosition.front { 

      do { 

       let input = try AVCaptureDeviceInput(device: device) 
       if captureSession.canAddInput(input) { 

        captureSession.addInput(input) 

        if captureSession.canAddOutput(photoOutput) { 

         captureSession.addOutput(photoOutput) 
         previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
         previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill 
         previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.portrait 
         cameraView.layer.addSublayer(previewLayer!) 


        } 

       } 

      } catch { 

       print("Error") 

      } 

     } 

    } 

    captureSession.startRunning() 
    print("") 

} 

И назад():

func back() { 

    let deviceDiscoverySession = AVCaptureDeviceDiscoverySession(deviceTypes: [AVCaptureDeviceType.builtInDualCamera, AVCaptureDeviceType.builtInTelephotoCamera,AVCaptureDeviceType.builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: AVCaptureDevicePosition.unspecified) 

    for device in (deviceDiscoverySession?.devices)! { 


     if device.position == AVCaptureDevicePosition.back { 

      do { 

       let input = try AVCaptureDeviceInput(device: device) 
       if cS.canAddInput(input) { 

        cS.addInput(input) 

        if cS.canAddOutput(photoOutput) { 

         cS.addOutput(photoOutput) 
         previewLayer = AVCaptureVideoPreviewLayer(session: cS) 
         previewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill 
         previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.portrait 
         cameraView.layer.addSublayer(previewLayer!) 


        } 

       } 

      } catch { 

       print("Error") 

      } 

     } 

    } 

    cS.startRunning() 
    print("") 

} 

проблема заключается в том, когда я запустить приложение. Я получаю нулевое значение codeError, когда я должен получить 1 o 2.

Как это решить?

+1

Ваш вопрос непонятен. Какова ваша проблема? – rmaddy

+0

Просто поместите свой код в блоке заявление: '@IBAction Func mySwitch (_ отправитель: UISwitch) { если sender.isOn { // Записывает код здесь codeError = 1 } еще { // Записывает код здесь codeError = 2 } } ' – nynohu

+0

Но мне нужно напечатать 1 или 2 за пределами оператора if –

ответ

0

он работает как вы оригинальный код. но вы печатаете его внутри viewWillAppear. но в это время он не инициализируется у вас uiswitch.

одно решение: дать ему значение по умолчанию:

var codeError: Int = 1 

или короче

var codeError = 1 

Примечание:

viewWillAppear (_ :)

Уведомляет т он видит контроллер, что его представление будет добавлено в иерархию представлений.

см https://developer.apple.com/reference/uikit/uiviewcontroller/1621510-viewwillappear

но называется по мнению где ваш UISwitch включен. для вашей главной цели (скрытой в комментариях к другому ответу), это неправильное место для печати переменной

0

Я не уверен, почему вы обращаетесь к переменной, заданной пользователем при взаимодействии с видом на viewWillAppear. Я предлагаю потратить некоторое время и изучить жизненные циклы UIViewController.

Но если вы просто хотите распечатать коды ошибок при изменении значений переключателя, это должно сделать это.

var codeError : Int? 

@IBAction func mySwitch(_ sender: UISwitch) { 
    if sender.isOn { 
     codeError = 1 
    } else { 
     codeError = 2 
    } 
} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    // will print nothing since errorCode is not set 
    printCodeError() 
} 

func printCodeError() { 
    if let codeError = self.codeError { 
    print("\(codeError)") 
    } 
} 
+0

codeError - пример, если codeError печатает 1 добавьте функцию, чтобы открыть переднюю камеру, и если codeError печатает 2, я открываю заднюю камеру , Вот почему для использования viewWillAppear –

+0

затем измените 'print (" 1 ")' на 'openFrontCamera()' и 'print (2)' на 'openBackCamera()' и напишите эти функции, чтобы сделать именно это. –

+0

, вы должны добавить свою основную задачу на свой вопрос. то мы можем помочь вам лучше – muescha

Смежные вопросы