public protocol ResponseJSONObjectSerializable {
init?(json: SwiftyJSON.JSON)
}
public struct Response<Value, Error: ErrorType> {
...
}
public func responseArray<T: ResponseJSONObjectSerializable>(completionHandler: Response<[T], NSError> -> Void) -> Self {
...
}
到目前为止,我理解最后一个函数意味着类型声明需要泛型类型T
,它遵循ResponseJSONObjectSerializable
中使用的completionHandler
协议Response
。<Value, NSError> -> Void
} struct的类型声明为self
,然后返回self
?
除了最后render(){
<View>
{this.state.selectData.map((value, index) => {
return (
<Text key={index}>
{value}
</Text>
);
})
}
</View>
);
}
部分之外,我觉得我可以理解所有这些。
答案 0 :(得分:0)
你对前两个声明是正确的。
最后一个有点奇怪,因为Alamofire如何响应序列化器。您可以链接多个这样的序列化程序:
Alamofire.request(myRequest)
.responseString { // handle response as string }
.responseArray { // handle response as array }
当调用该代码时,会发生这种情况:
Alamofire.request(myRequest)
创建请求和处理程序队列.responseString
&amp; .responseArray
将响应序列化程序添加到队列中.responseString
&amp; .responseArray
)这段代码几乎可以做同样的事情:
let manager = Alamofire.Manager.sharedInstance
manager.startsRequestImmediately = false
let alamofireRequest = manager.request(myRequest)
alamofireRequest.responseString { // handle response as string }
alamofireRequest.responseArray { // handle response as array }
alamofireRequest.resume()
但manager.startsRequestImmediately = false
表示在调用alamofireRequest.resume()
之前,网络调用尚未开始。它默认为true
,因此所有响应序列化程序都必须作为与manager.request(myRequest)
相同的语句的一部分添加。
由于响应序列化器返回self,我们可以缩短它:
let alamofireRequest = manager.request(myRequest)
alamofireRequest.responseString { // handle response as string }
alamofireRequest.responseArray { // handle response as array }
对此:
let alamofireRequest = manager.request(myRequest)
.responseString { // handle response as string }
.responseArray { // handle response as array }
如果我们使用manager.startsRequestImmediately = true
,那么我们根本不需要本地变量请求(因为我们不必调用alamofireRequest.resume()
):
manager.request(myRequest)
.responseString { // handle response as string }
.responseArray { // handle response as array }