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卿:我也想练练
  • a2220d76e5cb: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