2017-10-18 17 views
-1

問題に直面して別の解決策を試みましたが、まだ解決できませんでした。問題は、decodeJsonエリアのInstance member 'decodeJson' cannot be used on type 'Utils'です。あなたが見ることができるように、Utilsクラスは異なる関数を持っています。getDataWithURLSessiondecodeJsonおよびgetDataWithURLSessiondecodeJsonを使用する必要があります。インスタンスメンバー 'decodeJson'は 'Utils'タイプでは使用できません

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) 

     } 
    } 
} 

答えて

0

私が問題を正しく解決した場合、そのインスタンスが定義されていないそのクラスのメソッドで、Utilsクラスのインスタンスのプライベートメソッドを使用しようとしています。

  1. は、両方の方法は、インスタンスメソッド(静的しかし、公共のではない最初のものを作る)であることを確認します:あなたはいくつかのオプションがあり、それを解決するために

  2. 両方のメソッドをUtilsクラスのメソッドにする - 2番目の関数も静的にします。しかし、この場合、categoryList変数をそこに格納するには、decodeJsonメソッドでUtilsクラスのインスタンスを返さなければなりません。

あなたは私に知らせて、2番目のオプションを使用すると、コードに問題があります決定する場合

、私は私の答え

+0

おかげでコードを追加します。最初の解決策を試しましたが、うまくいきませんそこで、関数の名前を変更しました。 'static func getDataWithURLSession(withtoken:String){'から へ 'public func getDataWithURLSession(withtoken:String){'と 'private func decodeJson(data:Data?){'から ' public function decodeJson(data:Data?) - > [Any] 'を追加し、' return categoryList'を追加しました。実際に私のutilsクラスの問題は解決されていますが、私はAppDelegate.swiftでgetDataWithURLSession関数を呼び出すと、 'Instanceメンバ 'getDataWithURLSession'は 'Utils'型では使用できません。 ' – Guray

+0

両方のオプションは、格納されたプロパティを持つUtilsオブジェクトをどこで使うのかによって異なります。なぜ最初の方法が機能していないのですか?私はあなたがオブジェクトを持って、それをgetDataWithURLSessionを呼び出すことによってcategoryListを埋める必要があると思った。あなたは、アプリケーションデリゲートと他の場所で使用しているコードを表示できますか?私はあなたがそれをどのように使用するのかを意味します。私たちはあなたがそれをインスタンスのものにしようとしている間にクラスメソッドとして呼び出すと思います。 – Woof

関連する問題