Swift实现糗事百科Demo(实战项目)

本项目借用了某兄弟上传到code4app上的JokerClient源码中的接口,在此先谢谢这位兄弟!


在这里,你将会学习到解析JSON数据,网络请求功能,动态调整cell内容等功能!!!




最终的结果 是这样的,项目相对简单,很适合入门!下面让我们一起开始教程之旅吧!


1、先看下项目工程结构:



第一步:创建Utitlities文件夹,先完成基础通用的辅助功能

1、网络请求类:HttpRequest.swift

import Foundation

///
/// @brief 网络请求相关类
/// @date  2014-10-09
/// @author huangyibiao
///
class HttpRequest: NSObject {
    override init() {
        super.init()
    }
    
    ///
    /// @brief 把二进制数据转换成JSON格式的数据
    /// @param data NSDictionary?类型,网络请求返回来的二进制数据
    /// @return 如果解析成功,返回NSDictionary?类型的JSON数据;如果解析失败,会返回nil
    ///
    class func parseJSONData(data: AnyObject?) ->NSDictionary? {
        if let downloadData: NSData = data as? NSData {
            var jsonData: AnyObject? = NSJSONSerialization.JSONObjectWithData(downloadData,
                options: NSJSONReadingOptions.MutableContainers,
                error: nil) as? NSDictionary
            
            return jsonData as? NSDictionary
        }
        
        // 当解析失败时,会返回nil
        return nil
    }
    
    ///
    /// @brief 异步网络请求方法,需要请求地址参数及回调
    /// @param urlString 请求地址
    /// @param completion 请求完成或者请求失败的回调
    /// @return 请求成功时,会返回NSDictionary?的字典格式的数据,如果请求失败,会返回nil
    ///
    class func request(#urlString: String?, completion: (data: NSDictionary?) ->Void) {
        if urlString == nil {
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                println("urlstring 为空")
                // 请求出现,则返回nil对象表示
                completion(data: nil)
            })
            return
        }
        
        let url = NSURL.URLWithString(urlString!)
        let request = NSURLRequest(URL: url)
        
        let queue = NSOperationQueue()
        NSURLConnection.sendAsynchronousRequest(request, queue: queue) {
            (response, data, error) -> Void in
            if error != nil {
                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    println(error)
                    // 请求出现,则返回nil对象表示
                    completion(data: nil)
                })
            } else { // 请求成功,则返回正确的数据
                let parseData = self.parseJSONData(data)
                
                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    completion(data: parseData)
                })
            }
    
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值