gpt4 book ai didi

swift - 收到错误无法在属性初始值设定项中使用实例成员 'url';属性初始值设定项在 'self' 可用之前运行

转载 作者:行者123 更新时间:2023-11-30 11:15:06 25 4
gpt4 key购买 nike

我想知道为什么会出现此错误,我很好奇是否是因为我在同一文件夹中使用类和结构?

class ViewController: UIViewController {

let url = "http://roadfiresoftware.com/feed/json"

struct Blog: Decodable {
let title: String
let homepageURL: URL
let articles: [Article]

enum CodingKeys : String, CodingKey {
case title
case homepageURL = "home_page_url"
case articles = "items"
}
}

struct Article: Decodable {
let id: String
let url: URL
let title: String
}

let task = URLSession.shared.dataTask(with: URL(string: url)!) { (data, response, error) in
guard let data = data else {

NSLog("Error: No data to decode")
return
}

guard let blog = try? JSONDecoder().decode(Blog.self, from: data) else {
NSLog("Error: Couldn't decode data into Blog")
return
}

NSLog("blog title: \(blog.title)")
NSLog("blog home: \(blog.homepageURL)")

NSLog("articles:")
for article in blog.articles {
NSLog("- \(article.title)")
}
}
}

最佳答案

问题出在这一行:

let task = URLSession.shared.dataTask(with: URL(string: url)!) { (data, response, error) in

您试图直接在类中运行代码块,但您不能这样做,此代码需要包含在代码块中,例如方法调用。

我建议将此逻辑包装在 viewDidLoad() 方法中

override func viewDidLoad() {
super.viewDidLoad()

fetchBlog()
}

func fetchBlog() {
let task = URLSession.shared.dataTask(with: URL(string: url)!) { (data, response, error) in
guard let data = data else {

print("Error: No data to decode")
return
}

guard let blog = try? JSONDecoder().decode(Blog.self, from: data) else {
print("Error: Couldn't decode data into Blog")
return
}

print("blog title: \(blog.title)")
print("blog home: \(blog.homepageURL)")

print("articles:")
for article in blog.articles {
print("- \(article.title)")
}
}
}

您还可以从其他地方调用此函数,例如 init、viewWillAppear、另一个函数等。

注意:除非确实需要,否则不要在 Swift 中使用 NS 类,例如 NSLog,几乎总是有 Swift 版本

关于swift - 收到错误无法在属性初始值设定项中使用实例成员 'url';属性初始值设定项在 'self' 可用之前运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51818992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com