2017-10-18 7 views
-1

Ich konfrontiere ein Problem und ich versuchte verschiedene Lösungen, aber ich konnte noch nicht lösen. Das Problem ist Instance member 'decodeJson' cannot be used on type 'Utils' auf decodeJson Bereich. Wie Sie sehen können Utils Klasse hat verschiedene Funktionen, die getDataWithURLSession, decodeJson und getDataWithURLSession müssen decodeJson verwenden.Instance Mitglied 'decodeJson' kann nicht auf Typ 'Utils' verwendet werden

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) 

     } 
    } 
} 

Antwort

0

Wenn ich Ihre Frage richtig verstanden habe, werden Sie versuchen, private Methode einer Instanz der Utils-Klasse in der Methode dieser Klasse zu verwenden, wo diese Instanz nicht definiert ist.

es zu lösen Sie haben mehrere Möglichkeiten:

  1. beiden Methoden machen die Instanzmethoden (macht die erste nicht statisch, sondern öffentlich) zu sein.

  2. Machen Sie beide Methoden zu den Utils-Klassenmethoden - machen Sie auch die zweite Funktion statisch. Aber in diesem Fall müssen Sie eine Instanz der Utils-Klasse in der Methode decodeJson zurückgeben, um die categoryList-Variable dort speichern zu können.

Wenn Sie die zweite Option zu verwenden, wird darüber entscheiden, und Probleme im Code haben, lassen Sie mich wissen, werde ich den Code in meiner Antwort

+0

Dank hinzufügen. Ich habe versucht erste Lösung, aber nicht funktioniert. Also änderte ich den Namen Funktion 'statische func getDataWithURLSession (withtoken: String) {' zu 'öffentlichen func getDataWithURLSession (withtoken: String) {' und 'Private func decodeJson (Daten: Data) {' zu ' public func decodeJson (Daten: Daten?) -> [Any] 'und hinzugefügt' return categoryList'. Eigentlich ist mein utils-Klassenproblem gelöst, aber als ich die Funktion getDataWithURLSession bei AppDelegate.swift anrufe, sah ich ein anderes Problem, wie 'Instance-Member 'getDataWithURLSession' kann nicht für den Typ 'Utils' verwendet werden; meinst du, stattdessen einen Wert dieses Typs zu verwenden? ' – Guray

+0

Beide Optionen hängen davon ab, wo du dein Utils-Objekt mit gespeicherter Eigenschaft verwenden willst. Warum funktioniert die erste Methode nicht? Ich dachte, dass du ein Objekt haben musst und fülle es mit categoryList, indem du getDataWithURLSession aufruft. Können Sie den Code, den Sie verwenden, im App-Delegaten und an anderer Stelle anzeigen? Ich meine, wie du es benutzen wirst. Ich denke, Sie nennen es als eine Klassenmethode, während wir versuchen, es zu einer Instanz zu machen. – Woof

Verwandte Themen