【发布时间】:2017-12-12 23:22:50
【问题描述】:
我有一个 API 方法可以返回特定联赛的球队。我需要做的就是传入一些参数。
例如,API URL 如下所示:http://api.website.com/api/teams?season=last&league=0Xc334xUK4
这是我的代码:
@objc class APITeam: NSObject {
var leagueObjectID: NSString!
let baseUrl = "http://api.website.com/api"
static let sharedInstance = APITeam()
static let getTeamsEndpoint = "/teams"
static let params = "?season=last&league="
private override init() {}
func getTeams (_ onSuccess: @escaping(Any) -> Void, onFailure: @escaping(Error) -> Void) {
var request = URLRequest(url: URL(string: baseUrl + APITeam.getTeamsEndpoint + APITeam.params)!)
let session = URLSession.shared
request.httpMethod = "GET"
let task = session.dataTask(with: request) { (data : Data?, response : URLResponse?, error : Error?) in
if(error != nil){
onFailure(error!)
} else{
do {
let result = try JSONSerialization.jsonObject(with: data!)
onSuccess(result)
} catch {
print(error)
}
}
}
task.resume()
}
}
为了让这个 API 方法返回数据,我需要在发出请求时传入我想要球队的联赛的 objectID。
我尝试将参数添加到:
func getTeams (_ onSuccess: @escaping(Any) -> Void, onFailure: @escaping(Error) -> Void, leagueObjectID: String) {
var request = URLRequest(url: URL(string: baseUrl + APITeam.getTeamsEndpoint + APITeam.params + leagueObjectID)!)
这没有按预期工作。当我在另一个类中使用该方法时,“leagueObjectID”充当成功的附加部分,如果有意义的话,错误块。我需要能够将leagueObjectID 传递到方法中,以便在发出请求的URL 末尾使用它。
这就是我在 Objective-c 类中调用 APITeam 的方式:
[[APITeam sharedInstance] getTeams:^(id result) {
} onFailure:^(NSError * error) {
}];
如您所见,我添加到 getTeams 函数中的额外参数没有显示出来,当我尝试手动添加时,出现错误。
你会如何处理这个问题? 一个例子将不胜感激。
感谢您的宝贵时间
【问题讨论】:
-
“当我在另一个类中使用该方法时” - 编辑您的问题以显示此代码;工作的原始版本和带有附加
leagueObjectID参数的失败版本。这将帮助人们“理解”您所描述的内容并为您提供帮助。 -
惯用风格是将单个闭包作为最后一个参数。任何其他参数都将出现在闭包参数之前。单个闭包将被声明为 (SomeType?,Error?);那么如果
Error不是nil你就知道有一个错误。这种风格允许您在函数调用上使用尾随闭包。 -
@CRD 我的问题的底部显示了我试图做的事情。我觉得最好不要再次粘贴整个代码块。
-
@Paulw11 我现在要试试这个。
-
@LondonGuy - 除非我误解或不清楚,否则“问题的底部”显示您如何更改
getTeams的定义,而不是您如何创建APITeam实例并调用getTeams“在另一个班级”,这就是你说你遇到问题的时候。
标签: ios swift nsurlrequest