Невозможно преобразовать значение типа '(Bool, NSError!) -> Void' в ожидаемый тип аргумента 'ACAccountStoreRequestAccessCompletionHandler!'

ios swift xcode social-networking acaccount

6363 просмотра

2 ответа

145 Репутация автора

После обновления на Xcode 8 (Beta 1) и Swift 3 у меня есть ошибка в этой строке:

account.requestAccessToAccounts(with: accountType, options: nil, completion: {(success: Bool, error: NSError!) -> Void in

Это говорит:

Невозможно преобразовать значение типа '(Bool, NSError!) -> Void' в ожидаемый тип аргумента 'ACAccountStoreRequestAccessCompletionHandler!'

Перед этой строкой я определил «account» и «accountType»:

let account = ACAccountStore()
let accountType = account.accountType(
        withAccountTypeIdentifier: ACAccountTypeIdentifierTwitter)

Это мой (с работающими Xcode 7 и Swift 2):

func getTimeline() {

    //https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=twitterapi&count=2
    let account = ACAccountStore()
    let accountType = account.accountType(
        withAccountTypeIdentifier: ACAccountTypeIdentifierTwitter)

    account.requestAccessToAccounts(with: accountType, options: nil,
                                            completion: {(success: Bool, error: NSError!) -> Void in

                                                if success {
                                                    let arrayOfAccounts =
                                                        account.accounts(with: accountType)

                                                    if arrayOfAccounts.count > 0 {
                                                        let twitterAccount = arrayOfAccounts.last as! ACAccount

                                                        let requestURL = URL(string:
                                                            "https://api.twitter.com/1.1/statuses/user_timeline.json")

                                                        let parameters = ["screen_name": self.userName!,
                                                            "count" : "20"]

                                                        let postRequest = SLRequest(forServiceType:
                                                            SLServiceTypeTwitter,
                                                            requestMethod: SLRequestMethod.GET,
                                                            url: requestURL,
                                                            parameters: parameters)

                                                        postRequest.account = twitterAccount

                                                        postRequest.perform(
                                                            handler: {(responseData: Data!,
                                                                urlResponse: HTTPURLResponse!,
                                                                error: NSError!) -> Void in

                                                                if error != nil {

                                                                    Crashlytics.sharedInstance().recordError(error)

                                                                }
                                                                do {
                                                                    self.dataSource = try JSONSerialization.jsonObject(with: responseData, options: JSONSerialization.ReadingOptions.mutableLeaves) as! [AnyObject]

                                                                    if self.dataSource.count != 0 {
                                                                        DispatchQueue.main.async {
                                                                            self.tableView.reloadData()
                                                                        }
                                                                    }
                                                                } catch {
                                                                    print("catching")
                                                                }
                                                        })
                                                    }
                                                } else {
                                                    print("Failed to access account")
                                                }
    })

}
Автор: Devhess Источник Размещён: 18.07.2016 01:47

Ответы (2)


2 плюса

5014 Репутация автора

Вы должны обновить свой код следующим образом:

    account.requestAccessToAccounts(with: accountType, options: [:]) {
        (success: Bool, error: Error?) -> Void in
        // blah blah: the rest of the code
    }            

Эта версия для Xcode 8 GM Swift3 (обычная версия)

Автор: Stéphane de Luca Размещён: 20.09.2016 05:55

1 плюс

21 Репутация автора

В xcode 8.2 и swift 3 я проверил этот метод. Удалите Bool и NSError перед успехом и ошибкой, и все будет в порядке.

account.requestAccessToAccounts(with: accountType, options: nil,
                                        completion: {(success, error) -> Void in

Я надеюсь, что это поможет вам, удачи :)

Автор: ShervinJam Размещён: 06.02.2017 12:11
Вопросы из категории :
32x32