Swift 4.2.1, запрашивающий JSON с Xcode 10.1 - PullRequest
0 голосов
/ 19 ноября 2018

Мой код:

let cgpurl = URL(string: "https://api.coingecko.com/api/v3/ping")!
let task = URLSession.shared.dataTask(with: cgpurl) { (Data, URLResponse, Error) in
if let data = Data, let string = String(data: data, encoding: .utf8) { 
let CGPing = string } ; resume() }

Проблема со вторым использованием "cgpurl".Я пытался изменить дело безрезультатно.Я получаю сообщение об ошибке: «Невозможно использовать элемент экземпляра« cgpurl »в инициализаторе свойства; инициализаторы свойства запускаются до того, как станет доступным« self »».Хорошо ... но я не могу даже заменить cgpurl на реальную ссылку?Затем я получаю сообщение об ошибке «Неоднозначная ссылка на член dataTask (with: завершениюHandler :)». Я понимаю, что этот выпуск swift должен был быть «маленьким» и просто «исправлять ошибки», но я не смог найтилюбая текущая документация по этому выпуску.Я использую swift 4.2.1 с Xcode 10.1

1 Ответ

0 голосов
/ 20 ноября 2018

Этот код был взят непосредственно из учебного пособия для Swift 4.2

Нет, это не так.Код , который у вас никогда не был верным, в Swift 4.2 или любой другой версии Swift.Вы, возможно, слепо скопировали и вставили, не глядя на общий контекст.

Проблема в том, что код, как он у вас есть, сидит "свободно" наверху вашего контроллера представления или другого объявления класса,возможно, что-то вроде этого:

class MyViewController : UIViewController {
    let cgpurl = // ...
    let task = // ...
}

Это неправильно.Основное правило программирования Swift заключается в том, что исполняемый код может существовать только в функции .Например:

class MyViewController : UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let cgpurl = // ...
        let task = // ...
    }
}

Это может решить не все ваши проблемы, но, по крайней мере, вы пройдете мимо самой основной ошибки, которую вы делаете, и ошибка компиляции «Cannot use instance member» исчезнет.

...