实例成员'decodeJson'不能用于'Utils'类型

时间:2017-10-18 20:35:33

标签: json swift class oop instance

我遇到了一个问题,我尝试了不同的解决方案,但我还没有解决。 Instance member 'decodeJson' cannot be used on type 'Utils'区域的问题是decodeJson。如您所见,Utils类具有getDataWithURLSessiondecodeJsongetDataWithURLSession需要使用decodeJson的不同功能。

public class Utils {

    static var ApiURL = "http://xxx"

    var categoryList = [MangaCategory]()

    //MARK - JSON Searilization
    @available(iOS 10.0, *)
    static func getDataWithURLSession(withtoken: String){
        guard let url = URL(string: Utils.ApiURL + "/Category/Get") else {return}
        var request = URLRequest(url: url)

        request.httpMethod = "POST"
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.setValue("Bearer " + withtoken, forHTTPHeaderField: "Authorization")

        guard let httpBody = try? JSONSerialization.data(withJSONObject: [], options: []) else { return }
        request.httpBody = httpBody

        let task = URLSession.shared.dataTask(with: request) { (data, response, err) in

            decodeJson(data: data)
        }
        task.resume()
    }

    @available(iOS 10.0, *)
    private func decodeJson(data:Data?){
        guard let data = data else {return}
        dump(data)

        do {
            let json = try JSONDecoder().decode(Categorys.self, from: data)
            for manga in json.data{
                if json.data.count > categoryList.count
                {
                    let cat = MangaCategory(context: CoreDataService.context)

                    cat.category_name = manga.name
                    cat.category_id = Int16(manga.id)!

                    CoreDataService.saveContext()
                    self.categoryList.append(cat)
                }
                else{
                    print("JSon Serialization Es Geçildi.")
                }
            }

        } catch let jsonError {
            print("JSON Serializing error : ", jsonError)

        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果我的问题正确,那么您正尝试在该类的方法中使用Utils类实例的私有方法,该方法未定义该实例。

要解决此问题,您有以下几种选择:

  1. 将两种方法都作为实例方法(使第一种方法不是静态的而是公开的)。

  2. 使两个方法成为Utils类方法 - 使第二个函数也是静态的。但在这种情况下,您必须在方法decodeJson中返回Utils类的实例,以便能够在其中存储categoryList变量。

  3. 如果您决定使用第二个选项并且代码中存在问题,请告诉我,我将在答案中添加代码