Проверка авторизации для MPMediaLibrary в Swift 3

Я использую следующий код для проверки авторизации MPMediaLibrary:

func handlePermissions() {
    let permissionStatus = MPMediaLibrary.authorizationStatus()
    switch (permissionStatus) {
    case MPMediaLibraryAuthorizationStatus.authorized:
        print("permission status is authorized")
    case MPMediaLibraryAuthorizationStatus.notDetermined:
        print("permission status is not determined")
        MPMediaLibrary.requestAuthorization(MPMediaLibraryAuthorizationStatus -> permissionStatus)
    case MPMediaLibraryAuthorizationStatus.denied:
        print("permission status is denied")
    case MPMediaLibraryAuthorizationStatus.restricted:
        print("permission status is restricted")
    }
 }

В конечном счете, я пытаюсь запросить у пользователя авторизацию (при запуске) перед вызовом запроса... через случай MPMediaLibraryAuthorizationStatus.notDetermined:. Приведенный выше код выдает ошибку: Ожидаемый тип после '->'. Когда строка requestAuthorization() закомментирована, приложение аварийно завершает работу при запуске (доступ не был авторизован) и после исчезновения экрана запуска отображается окно запроса авторизации.

Я видел несколько примеров выполнения requestAuthorization() в Objective C, но ничего в Swift. Я не понимаю:

 MPMediaLibrary.requestAuthorization( handler: (MPMediaLibraryAuthorizationStatus) -> Void )

Как правильно запросить авторизацию для доступа к MPMediaLibrary в Swift 3?


person rocketman240    schedule 21.11.2016    source источник


Ответы (2)


Фактически вы использовали прототип метода requestAuthorization. Вам нужно адаптировать его для собственного использования.

MPMediaLibrary.requestAuthorization( handler: (MPMediaLibraryAuthorizationStatus) -> Void )

означает, что requestAuthorization принимает функцию в качестве параметра, и эта функция принимает MPMediaLibraryAuthorizationStatus в качестве параметра и ничего не возвращает.

Например, если я хочу запросить авторизацию, а затем отобразить результат в своей консоли. Сначала я проверяю, не авторизовано ли приложение:

if authoriationStatus != .authorized {
        MPMediaLibrary.requestAuthorization({
            (status) in
            switch status {
            case .notDetermined:
                print("notDetermined")
            case .denied:
                print("denied")
            case .restricted:
                print("restricted")
            case .authorized:
                print("authorized")
            }
        })
    }

Как видите, я использовал функцию в качестве параметра для метода requestAuthorization. Функция описана внутри {...}. Это называется замыканием, и это то, что вы всегда используете в Swift.

person Asphel    schedule 22.03.2017

Для Swift 4.2 проверять авторизацию для MPMediaLibrary

import MediaPlayer

let status = MPMediaLibrary.authorizationStatus()
        switch status {
        case .authorized:
            self.openMusicLibrary()
            break
        case .notDetermined:
            MPMediaLibrary.requestAuthorization() { status in
                if status == .authorized {
                    DispatchQueue.main.async {
                        self.openMusicLibrary()
                    }
                }
            }
            break
        case .denied:
            //show alert
            print("Please Allow Access to the Media & Apple Music from appliction setting.")
            break
        case .restricted:
            break
        }
person Hardik Thakkar    schedule 18.02.2019