Ios 使用泛型函数
我有下面的映射类。您将看到我使用了Ios 使用泛型函数,ios,iphone,swift,generics,alamofire,Ios,Iphone,Swift,Generics,Alamofire,我有下面的映射类。您将看到我使用了ObjectMapper和RealmSwift,因为我想将类也保存在Realm中 import Foundation import ObjectMapper import RealmSwift class LoginResponse: Object,Mappable { dynamic var status: Int = 0 dynamic var client: LoginData! required convenience in
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"]
}
}
下面是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
}
}
}
有人能帮我吗?如果您需要更多信息,请询问 我没有看到完整的代码,正如编译错误所说,有两个问题,一个是函数中没有使用“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)
}
}
//不返回,结果在完成块中。
函数对象映射器(完成:(T)->Void){
让alomofireApiRequest=AlamofireApiRequest(APIRQUEST:self)
Alamofire.request(alomofireApiRequest)
.responseObject(“”){(响应:响应)在
//parsedObject已属于T类
让parsedObject=response.result.value
try!self.uiRealm.write({()->Void in)
self.uiRealm.add(parsedObject)
})
完成(parsedObject)
}
}
消息中的第一个错误非常清楚。编译器如何识别什么是T?您应该具有类型与T相关的参数和/或返回值。第二个是因为您返回了parseObject,而不应该返回。中的响应等同于中的响应->无效。。。所以你不应该从闭包中返回任何东西
Generic parameter 'T' is not used in function signature
Unexpected non-void return value in void function
// 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)
}
}