这可能听起来像是一个非常愚蠢的问题,但我对于斯威夫特来说相当新,并且无法思考如何解决这个问题。正如您在此Screenshot中所看到的,我在RecipesViewController中有一个搜索配方文本字段,用户输入食物项目(我在api调用中使用)。在用户点击按钮后,我调用api并从该api获取数据,并将该数据存储在RecipesViewController类的实例变量(searchRecipe数组)中。现在我试图在表视图中显示我从api收到的数据,所以我有另一个名为SearchRecipeTViewController的类。在这个类中,我想用从api收到的数据填充表格,但是当我尝试访问searchRecipe数组(存储从api接收的元素)时,我得到一个空白值,我理解是由于实例变量被初始化为“”。但是现在我该如何解决这个问题,以便我可以从api获取数据并在用户点击按钮时将其显示在表格视图中。任何建议,将不胜感激。
单击按钮时从api调用和获取数据的代码
@IBAction func SearchButton(sender: UIButton) {
if let recipe = RecipeSearchBar.text {
searchRecipe = recipe
}
//search recipe API call
endpoint = "http://api.yummly.com/v1/api/recipes? _app_id=apiID&_app_key=apiKey&q=\(searchRecipe)"
Alamofire.request(.GET, endpoint).responseJSON { response in
if response.result.isSuccess {
let data = response.result.value as! NSDictionary
if let matches = data["matches"] as? [[String: AnyObject]] {
for match in matches {
if let name = match["recipeName"] as? String {
self.recipeName.append(name);
}
}
}
}
else if response.result.isFailure {
print("Bad request")
}
}
}
答案 0 :(得分:-1)
尝试使用SwiftyJSON来操作API返回的JSON。 SwiftyJSON使得使用JSON的API调用更加容易。以下是我使用的代码,它使用了Alamofire和SwiftyJSON。
//Use alamofire to connect to the web service and use GET on it
Alamofire.request(url).responseJSON { response in
if let error = response.result.error {
print("Error: \(error)")
return
}
//Value is the response the webservice gives, given as a Data Obkect
if let value = response.result.value {
//The information given from the webservice in JSON format
let users = JSON(value)
print("The user information is: \(users)")
//Get each username in the JSON output and print it
for username in users.arrayValue{
print(username["username"].stringValue)
}
}
}
忘记添加指向SwiftJSON的链接:https://github.com/SwiftyJSON/SwiftyJSON