2016-03-04 5 views
0

У меня есть следующий класс сопоставления. Вы увидите, что я использую ObjectMapper и RealmSwift, потому что я хочу сохранить класс в Realm.Работа с общей функцией

import Foundation 
import ObjectMapper 
import RealmSwift 

class LoginResponse: Object,Mappable { 

    dynamic var status: Int = 0 
    dynamic var client: LoginData! 

    required convenience init?(_ map: Map) { 
     self.init() 
    } 

    func mapping(map: Map) { 
     client <- map["client"] 
     status <- map["status"] 
    } 
} 

Теперь то, что у меня есть следующие функции:

public func login(email: String, password: String) -> LoginResponse { 
     let request = RestoryApiRequest.login(email, password: password) 
     return request.toObjectMapper() 
    } 

Ниже вы видите класс APIRequest:

import Foundation 
import Alamofire 
import ObjectMapper 
import AlamofireObjectMapper 
import RealmSwift 


struct ApiRequest { 
    let method: Alamofire.Method 
    let path: String 
    let parameters: [String: AnyObject]? 
    let uiRealm = try! Realm() 


    init(method: Alamofire.Method = .GET, path: String, parameters: [String: AnyObject]? = nil) { 
     self.method = method 
     self.path = "webservice/abc123/client/\(path)" 

     self.parameters = parameters 
    } 

    func toObjectMapper<T: Mappable>() -> Object { 
     let alomofireApiRequest = AlamofireApiRequest(apiRequest: self) 
     Alamofire.request(alomofireApiRequest) 
      .responseObject("") { (response: Response<T, NSError>) in 
       let parsedObject = response.result.value as! Object 
       try! self.uiRealm.write({() -> Void in 

        self.uiRealm.add(parsedObject) 
       }) 

       return parsedObject 
     } 
    } 
} 

Лика вы видите, я хочу передать назначаемый класс в и дать Класс объекта назад. Но это дает следующие ошибки компилятора:

Generic parameter 'T' is not used in function signature 

Unexpected non-void return value in void function 

Может кто-нибудь помочь мне в этом? Если вам нужна дополнительная информация, пожалуйста, спросите!

+1

первая ошибка достаточно ясна из сообщения. как компилятор мог узнать, что такое T? вы должны иметь параметр и/или возвращаемое значение с типом, связанным с T. Второй - потому, что вы возвращаете parseObject, и вы не должны. Ответ в эквиваленте ответа -> Пустота в ... так что вы ничего не должны возвращать из закрытия – user3441734

ответ

0

Я не вижу полный код, поскольку, как говорят ошибки компиляции, есть две проблемы: одна для «Т» не используется в вашей функции, другая - для возврата в вашу функцию.

Исправление должно примерно так:

// No Return, the result is in the completion block. 
func toObjectMapper<T: Mappable>(completion: (T)->Void) { 
    let alomofireApiRequest = AlamofireApiRequest(apiRequest: self) 
    Alamofire.request(alomofireApiRequest) 
     .responseObject("") { (response: Response<T, NSError>) in 

      // The parsedObject is already of class T 
      let parsedObject = response.result.value 
      try! self.uiRealm.write({() -> Void in 

       self.uiRealm.add(parsedObject) 
      }) 

      completion(parsedObject) 
    } 
} 
Смежные вопросы