Swift:从函数返回JSON类型

时间:2016-07-27 12:15:22

标签: json swift

所以我有一个需要返回从API端点接收的JSON对象的函数。由于某种原因,这个函数总是返回nil,即使我打印response.result.value时,它完美地包含了API响应,并输入if语句来赋值给returnJSON。非常感谢任何投入!

func storeContact(name: String, number: String, apiToken: String) -> AnyObject? {

var returnJSON: AnyObject?

let contact = ["api_token" : apiToken, "name" : name, "number": number]

Alamofire.request(.POST, "http://sample.app/api/v1/contact", parameters: contact, encoding: .JSON).responseJSON { (response) -> Void in

    if let value = response.result.value {

        returnJSON = value

    }
}

return returnJSON

}

1 个答案:

答案 0 :(得分:2)

Alamofire使用异步调用,因为互联网提取总是需要一些时间。在 List<Sozcu> sozcus; Sozcu sozcu; String text,text1; public XMLParser() { sozcus = new ArrayList<Sozcu>(); } public List<Sozcu> getCountries() { return sozcus; } public List<Sozcu> parse(InputStream inputStream){ try{ // HttpURLConnection connection =(HttpURLConnection) new URL(url).openConnection(); // InputStream inputStream = connection.getInputStream(); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(false); XmlPullParser parser = factory.newPullParser(); parser.setInput(inputStream,null); int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT){ String tagName = parser.getName(); switch (eventType){ case XmlPullParser.START_TAG: if(tagName.equalsIgnoreCase("item")){ sozcu = new Sozcu(); } break; case XmlPullParser.TEXT: text = parser.getText(); break; case XmlPullParser.END_TAG: if(tagName.equalsIgnoreCase("item")){ //countries.add(country); sozcus.add(sozcu); }else if(tagName.equalsIgnoreCase("description")){ // country.setRank(text); sozcu.setDescription(text); }else if(tagName.equalsIgnoreCase("link")){ // country.setName(text); sozcu.setLink(text); }else if(tagName.equalsIgnoreCase("pubDate")){ // country.setPopulation(text); sozcu.setDate(text); }else if(tagName.equalsIgnoreCase("title")){ // country.setPopulation(text); sozcu.setTitle(text); }else{ } break; default: break; } eventType = parser.next(); } }catch (Exception e){ e.printStackTrace(); } return sozcus; } 返回值后,<description><![CDATA[Balyoz davasından yargılanan Emekli Amiral Semih Çetin, CNNTÜRK&#8217;te Ahmet Hakan&#8217;ın sunduğu Tarafsız Bölge programına konuk oldu. Çetin programda, 15 Temmuz darbe girişimiyle ilgili dikkat çeken bir iddiayı paylaştı. &#160; &#8220;FETÖ&#8217;cülerin sözde darbe konseyi, &#8216;Yurtta Sulh&#8217;ta yer alan isimler açıklanmadan darbe girişimi bitti sayılmaz. İnsanlar ancak o zaman evine dönebilir&#8221; diyen Çetin, çarpıcı açıklamalar yaptı. Yurtta [&#8230;]]]></description> 的完成块始终会调用。在这种情况下使用闭包很常见:

Alamofire.request

用法:

storeContact