最近两个月跟着斯坦福大学白胡子老头的公开课学习了一下swift语言下的ios应用开发,作为实践,我计划开发自己的第一款App:网络视频播放器。
产品设计
什么,就你一个搬砖的还要产品设计?好好,没有产品设计那我就“借鉴”别人的总可以吧。
我想我的App应该是这样的:
为啥要“借鉴”sohu的界面呢?因为他们的节目呈现方式和我所能使用的后台数据简直太吻合了,我能够使用的后台数据组织方式是这样的:
整个视频数据总站点由若干个一级栏目组成,每一个一级栏目包含若干个二级栏目,二级栏目下有若干节目编排。数据组织就是这样的一个三层的树形组织。
数据获取、解析
解析
好了,有了目标,有了数据,第一步就是把数据解析出来,EPG返回给app应用的数据是json格式。ios中对json数据的解析不入Andoid那么便捷,这里json数据我直接使用的第三方库JsonJoy。github上swift版本的json解析库非常多,我试用下来觉得这一个我用着符合我的习惯。
使用JsonJoy解析json时,数据对象需要实现JSONJoy的protocol
public protocol JSONJoy {
init(_ decoder: JSONDecoder)
}
比如我的栏目对象定义:
struct Category: JSONJoy{
var Name: String = “”
var Code: String = “”
var ParentCode: String?
var TemplateCode: String = “”
var Count: Int?
init(_ decoder: JSONDecoder){
Name = safeString(decoder,”Name”)
Code = safeString(decoder, “Code”)
ParentCode = safeString(decoder, “ParentCode”)
TemplateCode = safeString(decoder, “TemplateCode”)
}
}
func safeString(decoder: JSONDecoder, key: String) -> String {
if var str = decoder[key].string {
return str
}
return “”
}
拿到服务器返回的数据以后直接将数据扔给decoder就可以了。对了,数据怎么获取的呢?
数据获取
数据获取仍然是使用已有的轮子SwiftHttp,swifthttp封装了一个HTTPTask,具体的使用也是非常简单:
let task = HTTPTask()
let params: Dictionary<String,AnyObject> = [“param1”:param1,”param2”:param2,”param3”:””,”param4”:1,”param5”:50]
task.POST(“http://servicename”, parameters: params, success: { (response) -> Void in
if let data = response.responseObject as? NSData {
let str = NSString(data: data, encoding: NSUTF8StringEncoding)
let decoder = JSONDecoder(data)
let header = HttpHeader(decoder[“Response”][“Header”])
if header.isSuccess(){
/*......*/
}
}
}, failure: { (error, response) -> Void in
/*......*/
})
总结
好了,今天就啰嗦这么多,介绍一下我的目标,以及我使用的轮子。
下一篇就啰嗦一下怎么展现一级栏目的数据,也就是片库那个页面