Переключатель должен быть исчерпывающим в Xcode 12

в новом Xcode 12 я получаю своеобразную ошибку в области разрешений. Переключатель должен быть исчерпывающим, чтобы добавить .limited case. Хотя я добавил .limited case, эта ошибка по-прежнему отображается. Я получаю это везде, где когда-либо используются переключатели. Можете ли вы указать мне в правильном направлении. Недавно я обновил свой проект с Xcode 11 до Xcode 12, поэтому немного запутался.

func openPhotoController(item: InfoItem) {
    
    
    let status = PHPhotoLibrary.authorizationStatus()
    
    switch status {
    case .authorized:
        
        DispatchQueue.main.async
        {
            let photoLib = photoLibViewController()
            photoLib.delegate = self
            photoLibCropImage = false
            photoLib.modalTransitionStyle = .crossDissolve
            photoLib.modalPresentationStyle = .fullScreen
            photoLib.allowMultipleSelection = false
            self.present(photoLib, animated: true, completion: nil)
        }
        print("authorized")
    //handle authorized status
    case .denied, .restricted :
        
        print("denied")
        
        AlertManager.showAlertView(title: "Alert?", subtitle: "Please allow access to your photo library to use this functionality", showCancelButton: true, okButtonTitle: "Go to Settings", cancelButtonTitle: "Cancel") {
            
            if let url = URL(string:UIApplication.openSettingsURLString)
            {
                if UIApplication.shared.canOpenURL(url)
                {
                    UIApplication.shared.open(url, options: [:], completionHandler: nil)
                }
            }
        }
    //handle denied status
    case .notDetermined:
        // ask for permissions
        PHPhotoLibrary.requestAuthorization { status in
            switch status {
            case .authorized:
                
                print("authorized")
                
                DispatchQueue.main.async
                {
                    let photoLib = photoLibViewController()
                    photoLib.delegate = self
                    photoLibCropImage = false
                    photoLib.modalTransitionStyle = .crossDissolve
                    photoLib.modalPresentationStyle = .fullScreen
                    photoLib.allowMultipleSelection = false
                    self.present(photoLib, animated: true, completion: nil)
                }
            // as above
            case .denied, .restricted:
                
                print("denied")
            // as above
            case .notDetermined:
                print("notDetermined")
            // won't happen but still
            case .limited:
                print("notDetermined")
            default:
                print("notDetermined")
            }  
        }
    }
}

person devNewbie    schedule 17.09.2020    source источник
comment
Есть 2 переключателя. Внешний переключатель (родительский переключатель) не имеет case .limited.   -  person Li Jin    schedule 17.09.2020
comment
спасибо немного запаниковал и забыл основы   -  person devNewbie    schedule 17.09.2020


Ответы (2)


На WWDC 2020 в iOS 14 Apple представила новую функцию, которая предоставит ограниченный доступ к библиотеке фотографий. Вам не хватает .limited корпуса для внешнего основного коммутатора. Ваш обновленный код:

switch PHPhotoLibrary.authorizationStatus(for: .readWrite) {
case .notDetermined:
    // ask for access
case .restricted, .denied:
    // sorry
case .authorized:
    // we have full access
 
// new option: 
case .limited:
    // we only got access to a part of the library
}

Подробнее см. здесь

person Kishan Bhatiya    schedule 17.09.2020

Добавьте .limited случай для внешнего переключателя.

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

...
default:
    // Otherwise, do something else

Документация по переключателю Swift: https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html.

person Eric Hua    schedule 17.09.2020