Swift开源项目-单糖

作者: hrscy | 来源:发表于2016-07-27 22:46 被阅读2639次

    单糖——良品生活指南:家居零食、礼物美妆、海淘购物

    感兴趣的朋友可以去 app store 下载

    iOS 版下载地址


    说明
    本程序仅供学习交流,不可用于任何商业用途。

    说明

    因为公司使用的是 Objective-C 开发 app,没有使用 swift 来开发,所以决定自己研究 Swift,研究 Swift 的时间不长,对于 Swift 的基本语法有了大致的了解,但是对有些概念和语法还是理解的不深,所以决定模仿一些已经发布的 app,一方面可以让自己更好地理解和使用 Swift,另一方面可以和志同道合的人一起交流,共同进步。

    使用 Swift 模仿的第一个 app 是单糖,总体来说界面搭建还算简单,而且结构不是很复杂,本次项目完成了大部分界面,对于项目中的数据接口都是通过 Charles 抓包获得,基本每个界面都是有数据请求,不会抓包的朋友可以看我 这一篇文章

    项目中有的地方代码写的不是很简洁,毕竟自己能力有限,对 Swift 使用不是很熟练,还请各位朋友不喜勿喷。在本文的最后,有项目的完整源码,喜欢的朋友可以下载下来,如果您感觉我写的代码对您有所帮助,还请在 github 给个 star,非常感谢您的支持!~

    项目截图

    单糖 首页 单品 单品详情 攻略详情 图文介绍 评论 分享 分类 搜索 设置

    项目环境

    项目使用 cocoapods 来管理第三方库,所以需要安装 cocoapods,安装方式网上有很多教程,这里不在详述。运行项目的前,请确保安装了 cocoapods,否则可能会出现错误。

    • Xcode 8.2.1
    • Swift 3.0
    • iOS 8.0

    使用到的第三方库:

    • SwiftyJSON - 解析 JSON 数据
    • SnapKit - 设置约束
    • Kingfisher - 缓存图片
    • SVProgressHUD - 提示框
    • FDFullscreenPopGesture - 侧滑手势
    • Alamofire - 网络请求

    项目结构

    项目结构

    由于刚接触 Swift,以及对 MVVM 的理解的不深,所以没有使用 MVVM 设计模式,项目使用传统的 MVC 设计模式。

    项目中只在首页加入了下拉刷新功能,其他界面未加入上拉和下拉刷新功能,后面有时间会完善。

    下面是项目的完整结构

    • 首页(单糖)
      • Model
        • YMChannel.swift
        • YMHomeItem.swift
        • YMSearchResult.swift
      • View
        • YMHomeCell.swift
        • YMHomeCell.xib
        • YMRefreshControl.swift
        • YMRefreshView.swift
        • YMRefreshView.xib
        • YMSearchRecordView.swift
        • YMSortCell.swift
        • YMSortCell.xib
        • YMSortTableView.swift
      • Controller
        • YMDanTangViewController.swift
        • YMTopicViewController.swift
        • YMDetailViewController.swift
        • YMSearchViewController.swift
    • Product(单品)
      • Model
        • YMProduct.swift
        • YMProductDetail.swift
        • YMComment.swift
      • View
        • YMActionSheet.swift
        • YMCollectionViewCell.swift
        • YMCollectionViewCell.xib
        • YMDetailChoiceButtonView.swift
        • YMDetailChoiceButtonView.xib
        • YMDetailCollectionViewCell.swift
        • YMDetailCollectionViewCell.xib
        • YMProductDetailBottomView.swift
        • YMProductDetailToolBar.swift
        • YMProductDetailToolBar.xib
        • YMProductDetailTopView.swift
        • YMShareButtonView.swift
        • YMDetailScrollView.swift
        • YMCommentCell.swift
        • YMCommentCell.xib
      • Controller
        • YMProductViewController.swift
        • YMProductDetailViewController.swift
        • YMTMALLViewController.swift
        • YMTMALLViewController.xib
    • Classify(分类)
      • Model
        • YMCollection.swift
        • YMCollectionPost.swift
        • YMGroup.swift
      • View
        • YMCategoryBottomView.swift
        • YMCategoryCollectionViewCell.swift
        • YMCategoryCollectionViewCell.xib
        • YMCollectionTableViewCell.swift
        • YMCollectionTableViewCell.xib
        • YMSeeAllTopicCell.swift
        • YMSeeAllTopicCell.xib
        • YMTopHeaderView.swift
        • YMTopHeaderView.xib
        • YMVerticalButton.swift
      • Controller
        • YMCategoryHeaderViewController.swift
        • YMCategoryViewController.swift
        • YMCollectionDetailController.swift
        • YMCollectionDetailController.xib
        • YMPostDetailViewController.swift
        • YMPostDetailViewController.xib
        • YMSeeAllController.swift
        • YMSeeAllController.xib
    • Me(我)
      • Model
        • YMSetting.swift
      • View
        • YMMeChoiceView.swift
        • YMMeFooterView.swift
        • YMMineHeaderView.swift
        • YMSettingCell.swift
        • YMSettingCell.xib
      • Controller
        • YMMessageViewController.swift
        • YMMeViewController.swift
        • YMSettingViewController.swift
    • Login&Register(登录和注册)
      • Controller
        • YMLoginViewController.swift
        • YMLoginViewController.xib
        • YMRegisterViewController.swift
        • YMRegisterViewController.xib
        • YMNewfeatureViewController.swift
    • Main(主要)
      • Category
        • String+Extension.swift
        • UITableView+EmptyData.swift
        • UIView+Extension.swift
      • Controller
        • YMBaseViewController.swift
        • YMNavigationController.swift
        • YMTabBarController.swift
      • Tools
        • YMConst.swift
        • YMNetworkTool.swift

    项目文档和数据接口

    抓取的数据接口请看 单糖数据接口单糖数据接口详细数据

    下载项目之后,点击此处,查看项目文档 项目文档 或者直接打开文件目录 『docs/index.html』。

    运行项目出现的问题都可以给我留言或者直接加我的 QQ 联系,我会尽快回复。

    github下载地址

    喜欢的朋友希望可以给个 Star,十分感谢您的支持!~

    相关文章

      网友评论

      • 文扉Song:接口现在是不是不能用了啊
      • 布袋的世界:不错的框架!
        要是再完善下第三方登录就完美了:heart_eyes:
        hrscy:@布袋的世界 你还可以看我的另一个开源项目,模仿今日头条,那个也不错
      • b5ff04e70a64:博主,我用你的程序转化为swift3.0出现以下问题怎么改:Type 'Any' has no subscript members
        代码:
        if let data = dict["data"].dictionary {
        if let channel_groups = data["channel_groups"]?.arrayObject{
        // outGroups 存储两个 inGroups 数组,inGroups 存储 YMGroup 对象
        // outGroups 是一个二维数组
        var outGroups = [AnyObject]()
        for channel_group in channel_groups {
        var inGroups = [YMGroup]()
        let channels = channel_group["channels"] as! [AnyObject]
        for channel in channels {
        let group = YMGroup(dict: channel as! [String: AnyObject])
        inGroups.append(group)
        }
        outGroups.append(inGroups as AnyObject)
        }
        finished(outGroups)
        }
        }
        半夏吖:@没有如果de 客气。
        b5ff04e70a64:@Lee_FULONG 成功了 :smile: ,谢谢你的回复
        半夏吖:@没有如果de let channels = channel_group["channels"] as! [AnyObject]
        改为 let channels = (channel_group as AnyObject)["channels"] as! [AnyObject]
        详细的可以看这里 http://www.jianshu.com/p/d2672b850fd7
      • Mr卿:我也想练练
      • Shorlyn:mark+膜拜,刚学
      • 2cbc49308ef2:建议楼主在更新一下啊,现在迁移到swift3的时候,各种一堆报错。 :joy: :joy: :sob: :joy:
      • Sxiaobai:亲人你这个项目其他界面的上拉刷新和下拉加载加了没 还有这些三方库我去哪能拿的到
        hrscy:@神殇小鬼 能用
        神殇小鬼:@Sxiaobai MJ不能用了?
      • Sxiaobai: 大神No such module"Kingfisher"怎么解决啊
        hrscy:@Sxiaobai cocoapods装了么
        Sxiaobai:@hrscy 我是7.3.1的啊

        一打开就提示这个错误
        hrscy:检查你的xcode是不是7.3以上
      • 兔兔瑾:可以加qq交流么,
        hrscy:@兔兔瑾 可以QQ 479148276
      • aaafa278a5b8:教科书般的代码,逐字阅读ing :smiley:
      • 喵鸢: :sweat: 很nice的文,收藏起来 等熟悉完swift语言,立马开始做做看
      • 1ebb0d3f8d0d:加油
        hrscy:@h丶Vinson 加油( ¯ᒡ̱¯ )و
      • 9d135f17e846:YMCategoryBottomView.swift中代码
        let group = topGroups[index] as! YMGroup
        let group = bottomGroups[index] as! YMGroup
        真机模拟出现这个错误:ambiguous use of 'subscript'
        hrscy:@swift幼儿园 这个地方确实有点问题,你可以试一下,把38,39行代码用下面的方式写
        let topGroups = outGroups[0] as! [YMGroup]
        let bottomGroups = outGroups[1] as! [YMGroup]
      • 涅槃简书:我的天运行起来报N个错,改了一些还是报错,最后不耐烦直接放弃。
        兔兔瑾:感觉是点错了。。。。我朋友之前用cocoapods我也不会运行。。然后还说他的有错误。。。。
        hrscy:@涅槃简书 请问你用 xcode 什么版本?电脑是否安装了 cocoapods?
        hrscy:@涅槃简书 请问是是什么错误?加我 QQ:479148276,我帮你解决一下
      • d4a11074d54e:出个视频教程肯定很多人学!
        hrscy:@Zombin 录视频比较麻烦。。。
      • LGirl:你的数据是抓包的吗?post的URL你是怎么请求的了?
        LGirl: @hrscy 我的问题已解决😊
        hrscy:@LGirl 如果是 POST 请求话,把请求方式改为 POST,加上请求参数,比如如果使用 Alamofire 请求的话,可以写成下面的形式
        Alamofire.request(.POST, url, parameters: params)
        只要把参数传进去就可以了,如果请求里有 header 的话,那改成下面的方式
        Alamofire.request(.POST, url, headers: headers)
        hrscy:@LGirl 这个 app 没有post的 url

      本文标题:Swift开源项目-单糖

      本文链接:https://www.haomeiwen.com/subject/hktajttx.html