【发布时间】:2015-04-16 16:11:58
【问题描述】:
我尝试使用Alamofire 进行自定义响应序列化
我按照 README 中的内容创建协议和扩展
@objc public protocol ResponseObjectSerializable {
init?(response: NSHTTPURLResponse, representation: AnyObject)
}
extension Alamofire.Request {
public func responseObject<T: ResponseObjectSerializable>(completionHandler: (NSURLRequest, NSHTTPURLResponse?, T?, NSError?) -> Void) -> Self {
let serializer: Serializer = { (request, response, data) in
let JSONSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
let (JSON: AnyObject?, serializationError) = JSONSerializer(request, response, data)
if response != nil && JSON != nil {
return (T(response: response!, representation: JSON!), nil)
} else {
return (nil, serializationError)
}
}
return response(serializer: serializer, completionHandler: { (request, response, object, error) in
completionHandler(request, response, object as? T, error)
})
}
}
但是当我尝试符合它时,我得到了这个错误类型'my_model_class'不符合协议'ResponseObjectSerializable'
我的模型只是一个简单的类
final class Shot: ResponseObjectSerializable {
required init?(response: NSHTTPURLResponse, representation: AnyObject) {
}
}
在 Xcode 6.3 中使用它,有人遇到过吗?并且知道如何完成这项工作?
回应
到 @airspeed 错误消失了,但让我感到困惑的是在 Apple Swift 文档中他们有一个关于 @objc 协议的示例以及符合它的 swift 类不需要 @objc
@objc protocol CounterDataSource {
optional func incrementForCount(count: Int) -> Int
optional var fixedIncrement: Int { get }
}
class TowardsZeroSource: CounterDataSource {
func incrementForCount(count: Int) -> Int {
if count == 0 {
return 0
} else if count < 0 {
return 1
} else {
return -1
}
}
}
【问题讨论】: