最后的gif效果图
一款移动应用一旦需要后端服务的强大支撑时,开发商就必须考虑基础架构、服务集成、可伸缩性等繁冗复杂的问题。而在这些方面耗费的大量时间精力财力却不能直接提升App的用户体验。
为了解决这些问题,部分App发行商租用了譬如AWS(Amazon Web Services)的公有云服务,有的则部署内部专用的私有云服务。而移动开发团队越来越趋向于小规模化,架设需要高成本运营的服务器群或许并不是最好的方法,租用或免费使用后端云服务开始流行起来。
这里我们演示一下国内使用率最多的Bmob云来进行学习。
注册账号并创建应用的过程略过,如果你已经看到这里的话应该至少算是个程序员了,不可能不会的。然后我们在pod中添加bmob:
pod 'BmobSDK', '~> 1.6.5'
然后记得更新一下 pod update
接着我们将学习如何在Swift中调用Objective-C的SDK:
创建一个Objective-C 文件,new File > iOS > Source > Objective-C File,随便命名一个保存即可
然后创建,一定要选择Create Bridging Header
完成后看到项目中多了两个文件
删除刚刚创建的.m文件,并在自动生成的.h文件中添加BmobSDK的引用
#import <BmobSDK/Bmob.h>
保存后我们就可以在其它地方调用BmobSDK了,添加别的Objective-C第三方库也是一样的操作,生成Bridging-Header.h文件后在其中import即可。
然后我们开始使用Bmob来展示App数据。
首先在AppDelegate的didFinishLaunchingWithOptions中注册Bmob:
Bmob.registerWithAppKey("Application ID")
然后就可以调用Bmob的增删改查啦,MainViewController中测试一个创建表的操作:
//创建方法
func saveObj(){
var obj:BmobObject = BmobObject(className: "GameScore")
obj.setObject(3, forKey: "class")
obj.saveInBackground()
}
我们调用一下这个方法并run一下,之后到Bmob后台查看,
我调用了两次,已经成功的创建了一张名为GameScore的表,并且保存了两条数据了,说明我们操作是成功的。
然后我们直接在页面上新建一个DoctorUser的表,并添加三个医生的数据测试一下:
接着我们更换tableView为真实数据
var list:NSMutableArray = NSMutableArray()
numberOfRowsInSection修改为list.count
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return list.count
}
再修改之前的上下拉方法
/**
下拉刷新
*/
func downPlullLoadData(){
xwDelay(1) { () -> Void in //延迟一秒再查询
let query:BmobQuery = BmobQuery(className:"DoctorUser")
query.cachePolicy = kBmobCachePolicyNetworkElseCache // 优先使用Bmob本地缓存
query.findObjectsInBackgroundWithBlock({array,error in
self.list.removeAllObjects() //先将之前的数据清除
for var obj in array {
self.list.addObject(obj) //再循环添加
}
self.tableView.reloadData()
self.tableView.headerView?.endRefreshing() //刷新结束
}
)
}
}
/**
上拉加载更多
*/
func upPullLoadData(){
xwDelay(1) { () -> Void in
let query:BmobQuery = BmobQuery(className:"DoctorUser")
query.cachePolicy = kBmobCachePolicyNetworkElseCache
query.findObjectsInBackgroundWithBlock({array,error in
for var obj in array {
self.list.addObject(obj) //加载更多时直接添加数据
}
self.tableView.reloadData()
self.tableView.footerView?.endRefreshing()
}
)
}
}
现在我们运行一下,可以看到数量查出来是正确的,上拉加载更多时因为我们仅仅只有3条测试数据,所以不用增加偏移量,始终从0开始查就可以了。
现在我们来修改cellForRowAtIndexPath方法,类似android中的getView
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! DoctorCell
let doctor = list[indexPath.row] as! BmobObject
cell.lblName.text = doctor.objectForKey("name") as? String
cell.lblPosition.text = doctor.objectForKey("position") as? String
cell.lblHospital.text = "\(doctor.objectForKey("hospital")) \(doctor.objectForKey("department"))"
cell.lblGood.text = doctor.objectForKey("good") as? String
return cell
}
我们需要一个图片加载的第三方库,在Pod中添加pod 'Kingfisher', '~> 1.8'
并update
完成后import Kingfisher,再到cellForRowAtIndexPath中添加一行对ivHead的修改
cell.ivHead.kf_setImageWithURL(NSURL(string: doctor.objectForKey("head") as! String)!)
再次运行,数据已经很完美的展示到界面上了:
ok ,第6节结束,大家可以多找一些别的第三方SDK集成实验,现在的互联网就是一堆堆的轮子,大家要么造轮子,要么用轮子,很多好用的第三方已经给我们写好了,我们直接使用api就行,既然是这样,在满足需求的前提下,我当然是直接用轮子,让更多的精力放到编程的思想上去,不然我一个母语是C#的androider来学iOS的Swift怎么可能快起来呢?