登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

斗鱼直播-Swift4.0

[复制链接]
来自: coderDeng666 分类: iOS精品源码 上传时间: 2018-9-4 23:58:48
Tag:

项目介绍:

仿斗鱼直播-Swift4.0

本项目是模仿斗鱼iOS最新版本,使用 Swift4.0开发,所有资源均来自斗鱼,API接口通过抓取斗鱼App获得,仅供学习参考使用。
整个项目比较大,我是利用闲余时间写的,未完成功能较多,后面会持续更新完成。。。
请大佬们多多指教,给个 Star,你的支持就是我不断前进的动力,谢谢。

项目环境

Xcode : 9.3
Swift : 4.0
iOS : 11.4

使用框架

网络层

使用 Alamofire + Moya + ObjectMapper 请求网络和解析数据,封装了一层Provider请求 ZJNetworkProvider

 /// 请求JSON数据
    func requestDataWithTargetJSON<T:TargetType>(target : T, successClosure: @escaping SuccessJSONClosure, failClosure: @escaping FailClosure) {
        let requestProvider = MoyaProvider<T>(requestClosure:requestTimeoutClosure(target: target))
        let _ = requestProvider.request(target) { (result) -> () in
            switch result{
            case let .success(response):
                do {
                    let mapjson = try response.mapJSON()
                    let json = JSON(mapjson)
                    guard let _ = json.dictionaryObject else{
                        failClosure(self.failInfo)
                        return
                    }
                    successClosure(json["data"])
                } catch {
                    failClosure(self.failInfo)
                }
            case let .failure(error):
                failClosure(error.errorDescription)
            }
        }
    }
    

也有使用自己封装的 Alamofire,使用 Decodable 解析数据

    class func requestData(type : ZJMethod, URlString: String, parameters : [String : String]? = nil,  finishCallBack : @escaping (_ responseCall : Data)->()){
        
        let type = type == ZJMethod.GET ? HTTPMethod.get : HTTPMethod.post
        // 配置 HTTPHeaders
        let headers: HTTPHeaders = [
            "Content-Type": "application/json",
            "charset":"utf-8",
            ]
   
        Alamofire.request(URlString, method: type, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
            // 处理 cookie
            let headerFields = response.response?.allHeaderFields as! [String: String]
            let url = response.request?.url
            let cookies = HTTPCookie.cookies(withResponseHeaderFields: headerFields, for: url!)
            var cookieArray = [ [HTTPCookiePropertyKey : Any ] ]()
            for cookie in cookies {
                cookieArray.append(cookie.properties!)
            }
            if !(UserDefaults.standard.object(forKey: ZJ_DOUYU_TOKEN) != nil){
                // 保存 cookie
                UserDefaults.standard.set(cookieArray, forKey: ZJ_DOUYU_TOKEN)
            }else{
                print("token\(String(describing: UserDefaults.standard.object(forKey: ZJ_DOUYU_TOKEN)))")
            }
            print("Method:\(type)请求\nURL: \(URlString)\n请求参数: \(String(describing: parameters))")
            if parameters != nil{
                print(response.request?.url ?? "url")
                
                print(parameters ?? String())
            }
            
            guard let result = response.result.value else {
                print(response.result.error ?? "错误❌")
                return
            }
            
            guard let dict = result as? [String : Any] else {
                return
            }
            
            // 返回字典类型 Data
            if let dataDict = dict["data"] as? [String : Any] {
                
                let jsonData = try? JSONSerialization.data(withJSONObject: dataDict, options: .prettyPrinted)
                print(dict)
                if jsonData != nil {
                    finishCallBack(jsonData!)
                    return
                }
            }
            
            // 返回数组类型Data
            if ((dict["data"] as? [Any]) != nil) {
                let arrData = try? JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)
                print(dict)
                if arrData != nil {
                    finishCallBack(arrData!)
                }
            }
        
        }
    }       

约束布局

采用 SnapKit 对控件的约束,扩展了一层快速创建的控件的UIView,与SnapKit框架结合

 /// 快速创建 Label,设置文本, 文本颜色,Font,文本位置,父视图,约束
    ///
    /// - Parameters:
    ///   - text: 文本
    ///   - textColor: 文本颜色
    ///   - font: 字体大小
    ///   - textAlignment: 文本位置
    ///   - supView: 父视图
    ///   - closure: 越是
    /// - Returns:  UILabel
    class func zj_createLabel(text : String? , textColor : UIColor?, font : UIFont?, textAlignment : NSTextAlignment = .left,supView : UIView? ,closure:(_ make : ConstraintMaker) ->()) -> UILabel {
        
        let label = UILabel()
        label.text = text
        if (textColor != nil) { label.textColor = textColor }
        if (font != nil) { label.font = font }
        label.textAlignment = textAlignment
        if supView != nil {
            supView?.addSubview(label)
            label.snp.makeConstraints { (make) in
                closure(make)
            }
        }
        return label
    }

图片加载

使用 Kingfisher 加载图片,扩展了一层加载方法,可以更安全快速的设置图片与占位图

/// 1.加载网络图片
    ///
    /// - Parameters:
    ///   - urlStr: 图片 URL地址
    ///   - placeholder: 占位图
    func zj_setImage(urlStr: String, placeholder: UIImage? = nil) {
        guard let url = URL(string: urlStr) else {
            print("url:|\(urlStr)|无法解析为URL类型")
            if let placeholder = placeholder{
                self.image = placeholder
            }
            return
        }
        kf.setImage(with: url, placeholder: placeholder, options: [.backgroundDecode], progressBlock: nil, completionHandler: nil)
    }
    

后期将会加入 RxSwift 处理业务

自定义视图

本项目多出采用自定义的视图,纯 Swift 完成。

  • 自定义无限轮播图

  • 自定义分段滚动视图

  • 自定义加载动画

相关源码推荐:

我来说两句
*滑动验证:
所有评论(1190)
逆鳞九霄 2018-9-5 09:45:30
楼主用心了,内容非常精彩。
回复
知新1990 2018-9-5 09:45:40
学习...学习...
回复
A7472 2018-9-5 09:45:52
感谢分享,楼主V5~
回复
打个酱油的 2018-9-5 09:45:55
感谢大神~
回复
bug是啥 2018-9-5 09:46:17
学习...学习...
回复
Ek645 2018-9-5 09:46:28
相当不错,感谢无私分享精神!
回复
BlueManlove 2018-9-5 09:46:30
感谢大神分享,必须顶!
回复
张伟伟321321 2018-9-5 09:54:22
很给力,Code4App有你更精彩!
回复
coderDeng666 2018-9-5 10:10:55
很给力,Code4App有你更精彩!
回复
提取码: 斗鱼直播-Swift 下载次数:397 状态:已购或VIP 售价:0(原价:5)金钱 下载权限:初级码农 
4296 7 397
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,742864542

如何获得代码达人称号?

代码贡献英雄榜
用户名 下载数
通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表