2017-10-18 1 views
-1

문제가 발생하여 다른 해결책을 시도했지만 아직 해결할 수 없습니다. 문제는 decodeJson 영역의 Instance member 'decodeJson' cannot be used on type 'Utils'입니다. 아시다시피 Utils 클래스는 getDataWithURLSession, decodeJsongetDataWithURLSession의 각기 다른 기능을 가지고 있으며 decodeJson을 사용해야합니다.인스턴스 멤버 '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 클래스 메소드로 만듭니다. 두 번째 함수도 정적으로 만듭니다. 그러나이 경우에는 decodeJson 메서드에서 Utils 클래스의 인스턴스를 반환해야만 categoryList 변수를 저장할 수 있습니다.

당신이 알려주세요, 두 번째 옵션을 사용하고 코드에 문제가있는 것입니다 결정하는 경우

, 나는 내 대답

+0

감사의 코드를 추가합니다. 첫 번째 해결책을 시도했지만 작동하지 않았습니다. 그래서 함수의 이름을 으로 변경했습니다. 정적 함수 getDataWithURLSession (withtoken : 문자열) {' ''에 public function getDataWithURLSession (withtoken : 문자열) {'및 ''은 private function decodeJson (data : Data?) {'~ ' public function decodeJson (data : Data?) -> [Any]'를 추가하고'return categoryList'를 추가했습니다. 사실 내 utils 클래스 문제가 해결되지만 AppDelegate.swift에서 getDataWithURLSession 함수를 호출 할 때 'Instance member'getDataWithURLSession '과 같은 다른 문제가'Utils '유형에 사용할 수 없습니다. 대신이 유형의 값을 사용 했습니까? ' – Guray

+0

두 옵션 모두는 저장된 속성이있는 Utils 객체를 어디에서 사용할 것인지에 따라 다릅니다. 첫 번째 방법이 효과가없는 이유는 무엇입니까? getDataWithURLSession을 호출하여 객체가 있어야하며 categoryList를 채울 필요가 있다고 생각했습니다. 앱 위임과 다른 곳에서 사용중인 코드를 보여줄 수 있습니까? 나는 당신이 그것을 어떻게 사용할 것인지를 의미합니다. 우리는 그것을 인스턴스 메소드로 만들려고하면서 클래스 메소드라고 부르고 있다고 생각합니다. – Woof

관련 문제