我有以下映射类。您会看到我使用ObjectMapperRealmSwift,因为我也想在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
        }
    }
}


就像您看到我要传递Mappable类并返回Object类一样。但这会产生以下编译器错误:

Generic parameter 'T' is not used in function signature

Unexpected non-void return value in void function


有人可以帮我弄这个吗?如果您需要更多信息,请询问!

最佳答案

我看不到完整的代码,正如编译错误所述,有两个问题,一个问题是您的函数中未使用'T',另一个问题是您的函数中没有返回值。

该修复程序应与此类似:

    // 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)
    }
}

关于ios - 使用通用功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35794535/

10-12 00:18
查看更多