Swift 4.2.1请求带有Xcode 10.1的JSON



我的代码:

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:completionHandler:(的模糊引用",我意识到swift的这个版本应该是"small"&只是为了"修复错误",但我找不到关于这个版本的任何当前文档。我使用的是带有Xcode 10.1 的swift 4.2.1

此代码直接取自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 = // ...
}
}

这可能无法解决您的所有问题,但至少您将克服所犯的最基本的错误,并且"无法使用实例成员"编译错误将消失。

最新更新