收到错误无法在属性初始化程序中使用实例成员'url'。属性初始化程序在“自我”可用之前运行

时间:2018-08-13 09:16:32

标签: swift class struct

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

npm update

1 个答案:

答案 0 :(得分:0)

问题在于以下特定行:

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中使用NSLog之类的NS类,几乎总是一个Swift版本