记录和分享一下使用swift开发一个app的过程,和大家交流学习。

从一个简单的UITableViewController开始

创建gitub仓库

按照我的习惯首先github网站上面建立一个仓库,这样方便交流和学习的时候更加便捷。
这里我使用的是mac上的github桌面应用,如果你不熟悉git命令行操作,也可以下载


这里我因为我已经在github远端创建好了,所以会有一个已经存在的警告提示。如果你是新创建的,那么是不会有这个警告的

创建新的swift项目

我使用的是最新的macos/sierra/,如果你也是,那么应该已经是最新的xcode8和swift3了。
如果你不确定自己的swift版本,可以在 Finder-其他-终端 打开后输入 swift -version 查看一下。

接下来我要做下面几件事情来新建一个项目结构

  • 创建项目。

  • 选择应用模板。

  • 完成项目的基础信息配置。


这里我选择一个空的模板

项目的基础信息配置这里解释一下

  • Product Name: 这个就是项目名称,我们这里起的是 PhotosPin

  • Team: 这里会自动有的,就是你的开发者的账号

  • Organization Name: 组织名称,一般可能是你告诉的域名

  • Organization Identifier: 组织标识,一般这里会将你的个人或是公司的域名反转写,比如: com.appledev

  • Bundle Identifier: 这里会根据你写的组织标识自动生成,不用管

  • Language: Swift – 选择开发语言,这里当然是选 swift

  • Devices: iPhone – 这里选择你是为什么设备开发的,我们这里选iPhone

  • Use Core Data: [不选] – 这里是问你项目是否使用Core Data,它是apple官方支持的一个本地数据持久化框架,在我们的应用中期会使用到,但这里先不选

  • Include Unit Tests: [不选] – 这里是问你是否引入单元测试,我们先不选

  • Include UI Tests: [不选] – 这里从名字可以看出问你是否引入界面UI的测试,不选

点击右下角的 Create 按钮后你看到就是项目初始的结构了


上图是我使用的一些习惯,你感兴趣也可以参考下,红色数字与绿色数字的效果是对应

  1. 显示行号

  2. 当鼠标碰到代码块时,高亮显示代码区域,方便我查看关注的代码区域

  3. 代码字符的长度提示线,就是说在一行代码字母数量80个的地方有一条线,提醒我这行代码是不是不易于阅读,当然根据你情况而定

  4. 项目的文件,快捷键是 control+5 ,你试试就知道了,对应左侧的项目结构,因为我希望敲代码的区域能够大一些,一般讲最左侧的项目结构关闭了

  5. 罗列当前文件中的变量、方法、注释...等等,快捷键是 control+6 非常有用,特别是你的代码写了很多的时候。

使用 UITableViewController 创建一个表格视图的应用

在创建项目的时候回自动生成一个空的 ViewController 和一些文件,我们这里来看如何使用 UITableViewController 来创建一个简单的表格应用。

首先要选择 Main.storyboard 将自动生成的 view controller 删除掉,选中后按 delete 键。也不需要默认与这个 view controller 关联的 ViewController.swift 文件,一样选中后按 delete 键,在弹出的确认框选中 "Move to Trash"(区别就是这个是真的吧文件从项目删除了,前面一个选项只是把文件的引用清除了,文件还是在)。

然后从右侧下面的 Object library 中选择 Table View Controller ,拖拽到中间的 Main.storyboard 中。可以右侧下面的 Object library 中长按一个组件就会弹出 名称和说明,建议吧每个都看一下,方便以后能快速的找到需要的组件。

  1. 创建一个 UITableViewController

  2. 有时候选择不方便的时候,比如组件多了,鼠标不好选择的时候,可以在左侧的 Document Outline 面板中通过结构选择

  3. 这里会有个 M ,就是 modification 的意思,因为我们使用了远程代码github,我们本地的代码与远程的代码不一样了,这里就会显示一个标识,后面到了某个阶段,我们就会将修改的代码内容同步到远程库,就不会有显示了。

因为我们是自己创建的一个 UITableViewController ,需要我们手动的指定app的加载初始视图是哪一个,我们这里来按下面的步骤指定。

  1. 在 Main.storyboard 中选中 TableViewController

  2. 在左侧面板选中 Attributes inspector 属性面板

  3. 在 View Controller 单元,将 Is Initial View Controller 勾选

  4. 你会发现在 Main.storyboard 中的 TableViewController 左侧多了一个箭头,表示这个 View Controller 是app的第一个视图

一般 Table View Controller 是要关联 UITableViewControllerclass 的。下面来创建这个 class 类,并与 Main.storyboard 中的 TableViewController 关联。

这里注意新建 class 类 文件的时候,在左侧的 Project Navigator 项目导航中,要选中项目下面黄色文件夹,不要选中项目,因为选中项目会将文件创造在项目的根文件夹中,到时候你再想移动到项目类文件夹时会出现 在xcode中结构移下去了,但在实际项目文件夹中还是在外面。我还没解决是什么原因,所以这里注意下。

这里选择 Cocoa Touch Class ,然后命名为 “PhotosTableViewController”,下面的 "Subclass of" 写入 UITableViewController 。意思就是说我们自定义的类是 UITableViewController 的子类。

这里如果以前接触过OOP面向对象编程会比较好理解。
简单理解就是,我们自己创建的 PhotosPinTableViewController 称为子类,它会继承(拥有)UITableViewController 这个父类中定义的所有 状态(变量、常量)和功能(方法)。

到这里,在 Main.storyboard 里刚刚我们拖拽进去的的 TableViewController 要与刚刚我们创建 PhotosPinTableViewController.swift 关联起来。这样就可以理解为当前在 Main.storyboard 中的这个视图 view controller 为刚刚创建的这个类来管理和控制。

  1. 选中view controller

  2. 在右侧面板切换到第三个 Identity inspector

  3. 在 Custom Class 单元下将 Class 下拉选中刚刚创建的类 PhotosPinTableViewController.swift

在开始阶段,我们会先模拟一些固定的假数据来测试功能是否能够正常跑通,逻辑是否正确。所以在 PhotosPinTableViewController.swift 中定义我copy 过来的一些数据。

var photoNames = ["Cafe Deadend","Homei","Teakha","Cafe Loisl","Petite Oyster","For Kee Restaurant","Po's Atelier","Bourke Street Bakery","Haigh's Chocolate","Palomino Espresso","Upstate","Traif","Graham Avenue Meats","Waffle & Wolf","Five Leaves","Cafe Lore","Confessional","Barrafina","Donostia","Royal Oak","CASK Pub and Kitchen"]

这里注意以下,因为PhotosPinTableViewController继承了UITableViewController,而UITableViewController实现了UITableViewDelegateUITableViewDataSource两个协议(也可以理解为接口)。所以PhotosPinTableViewContrller也就从UITableViewController里面获得了UITableViewControllerUITableViewDataSource里面定义的功能(方法)。查看OOP面向对象编程

这里推荐一个Mac上的应用Dash,用来查看各种开发api文档,按照目前程序员的技能发展树,掌握多门语言和技术是必备的,所以这个应用是非常不错的选择。Xcode中是自带Apple开发文档的。

查看一下UITableViewDelegateUITableViewDataSource两个协议

  1. 可以搜索“uitableviewcontroller”不区分大小写

  2. 显示当前的Class的继承树,从上往下看

  3. 显示当前的Class实现了哪些协议 Protocol

  4. 在TableViewController要关注的两个基础协议

简单理解
UITableViewDelegate:主要管理处理表视图的界面和功能相关的
UITableViewDataSource:主要处理表视图中的数据和操作相关的

  1. 方法名,有时候也这样写 tableView(_:numberOfRowsInSection:),swift的方法作用从定义的名称结构是很好理解的

  2. tableView(_:numberOfRowsInSection:)的功能是返回的表格的块组section里面数据的行数。这里就是我们定义的数据数组的个数使用 .count 获得

  3. 参数,表示当前的表视图

  4. 参数

  5. 表示这个方法是必须实现

  6. 方法的声明结构

  7. 参数,表视图对象的信息

  8. 参数,标识表视图块的索引

  9. 返回值,数据的数量

在PhotosPinTableViewController.swift中加入以下代码

override func numberOfSections(in tableView: UITableView) -> Int {
        // #返回在表的第几个section中
        return 1
    }

override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
        // #返回行数
        return photos.count
    }
    
override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //通过下图指定的Identifier标识来获得cell
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell",for: indexPath)
        //下面是table view默认样式下的右边的文字与左边的图片排列
        cell.textLabel?.text = photoNames[indexPath.row]
        cell.imageView?.image = UIImage(named: photosImages[indexPath.row])
        
        return cell
    }
  • tableView(_:numberOfRowsInSection:)方法返回的值决定调用tableView(_:cellForRowAt:)多少次

  • 每次调用tableView(_:cellForRowAt:)就决定行里面内容和数据的显示。

将图片资源加入到项目中 (提取:f6py)

  1. 选中左侧项目导航的 Assets.xcassets

  2. 将图片资源文件夹拖拽到中间的区域

使用swift3从零写一个基于位置信息的照片集iOS应用系列一的更多相关文章

  1. 用Swift写一个IOS的自定义弹窗-纯代码实现

    包括纯文字提示,成功、失败、警告和菊花图。是扩展UIViewController的实现。

  2. Swift coreAnimation 加计时器写的游戏《飞机大战》

    最近在学习swift的动画和图层,就用现学的东西写了个游戏,基本思想基本功能都实现了,图片都是在网上找得。希望能帮助大家更好的理解动画和图层、声明下,我是初学者,代码写的不好。大家应该都能看懂。游戏所有代码都是swift加动画加计时器,没有用任何游戏引擎框架。效果图源代码地址:点击打开链接地址失效了的话我可以补上

  3. Swift初探之纯代码写tabBar

    冰之依韩版女装最近的项目新版本基本完成了,闲来无事学习学习新出的语言Swift。对于有OC基础的人来说学习Swift还是很简单的,下面是我自学写的Tabbar,当然这并不是自定义的。不过对于一般的需求还是可以满足的。下面是我仿“折800”写的一个Tabbar,由于图片原因导致有点小小的瑕疵代码如下更多经验请点击核心代码点击下载Demo

  4. 使用swift3从零写一个基于位置信息的照片集iOS应用系列一

    记录和分享一下使用swift开发一个app的过程,和大家交流学习。完成项目的基础信息配置。使用UITableViewController创建一个表格视图的应用在创建项目的时候回自动生成一个空的ViewController和一些文件,我们这里来看如何使用UITableViewController来创建一个简单的表格应用。下面来创建这个class类,并与Main.storyboard中的TableViewController关联。意思就是说我们自定义的类是UITableViewController的子类。简单

  5. 如何在PHP中使DOMDocument写独立=是?

    我正在使用PHP5来创建XML文件.我有这样的代码:问题是创建的XML代码以这样的根节点开始:但我希望它是这样的:我想我需要在$doc上调用一些函数,但我无法弄清楚哪一个?你想要设置它不是类的功能,它是一个属性,所以在文档中找到它有点难.你可以阅读它here.

  6. 知道这20个正则表达式,能让你少写很多代码

    熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基本日期格式的JavaScript代码:下面是技匠整理的,在前端开发中经常使用到的20个正则表达式。

  7. 20个正则表达式,让你少写1000行代码

    正则表达式——古老而又强大的文本处理工具。仅用一段简短的表达式语句,就能快速地实现一个复杂的业务逻辑。掌握正则表达式,让你的开发效率有一个质的飞跃。正则表达式经常被用于字段或任意字符串的校验,比如下面这段校验基本日期格式的JavaScript代码:varreg=/^\\2$/;varr=fieldValue.match;ifalert('Dateformaterror!');1、校验密码强度密码的强度必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间^(?

  8. [乐意黎转载]知道这20个正则表达式,能让你少写1,000行代码

    正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基本日期格式的JavaScript代码:下面是技匠整理的,在前端开发中经常使用到的20个正则表达式。

  9. 知道这几个正则表达式能让你少写 1,000 行代码

    正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基本日期格式的JavaScript代码:下面是技匠整理的,在前端开发中经常使用到的20个正则表达式。

  10. 知道这 20 个正则表达式,能让你少写 1,000 行代码

    熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基本日期格式的JavaScript代码:varreg=/^\2$/;varr=fieldValue.match;ifalert;下面是技匠整理的,在前端开发中经常使用到的20个正则表达式。

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部