从头开始swift2.0 仿乐乐医项目(六)Bmob云集成

最后的gif效果图


Untitled.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,随便命名一个保存即可


从头开始swift2.0 仿乐乐医项目(六)Bmob云集成_第1张图片
QQ20151126-16.png
从头开始swift2.0 仿乐乐医项目(六)Bmob云集成_第2张图片
QQ20151126-17.png

然后创建,一定要选择Create Bridging Header

从头开始swift2.0 仿乐乐医项目(六)Bmob云集成_第3张图片
QQ20151126-19.png

完成后看到项目中多了两个文件

从头开始swift2.0 仿乐乐医项目(六)Bmob云集成_第4张图片
QQ20151126-20.png

删除刚刚创建的.m文件,并在自动生成的.h文件中添加BmobSDK的引用
#import
保存后我们就可以在其它地方调用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后台查看,

从头开始swift2.0 仿乐乐医项目(六)Bmob云集成_第5张图片
QQ20151126-1.png

我调用了两次,已经成功的创建了一张名为GameScore的表,并且保存了两条数据了,说明我们操作是成功的。
然后我们直接在页面上新建一个DoctorUser的表,并添加三个医生的数据测试一下:
从头开始swift2.0 仿乐乐医项目(六)Bmob云集成_第6张图片
QQ20151126-2.png

接着我们更换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开始查就可以了。


从头开始swift2.0 仿乐乐医项目(六)Bmob云集成_第7张图片
QQ20151126-3.png

现在我们来修改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)!)
再次运行,数据已经很完美的展示到界面上了:

从头开始swift2.0 仿乐乐医项目(六)Bmob云集成_第8张图片
QQ20151126-4.png

ok ,第6节结束,大家可以多找一些别的第三方SDK集成实验,现在的互联网就是一堆堆的轮子,大家要么造轮子,要么用轮子,很多好用的第三方已经给我们写好了,我们直接使用api就行,既然是这样,在满足需求的前提下,我当然是直接用轮子,让更多的精力放到编程的思想上去,不然我一个母语是C#的androider来学iOS的Swift怎么可能快起来呢?

你可能感兴趣的:(从头开始swift2.0 仿乐乐医项目(六)Bmob云集成)