关于swift - 网络请求+MD5,混合编程
来源:互联网 发布:手机淘宝电影在线看 编辑:程序博客网 时间:2024/05/18 03:18
因为这几天上传迭代版本,所以总是浏览苹果开发者中心,发现最近开发者中心网站的更新频率挺大啊,主页放上了wwdc(世界开发者大会),亮点是Swift代码。所以趁着这几天空闲期抓紧恶补了一下Swift,把这几天的心得记录下来:
1.熟悉Swift的基础知识(很重要)
2.Swift和OC的编程思想是相同的,也就是说,你想要实现一个功能,OC用什么方法实现,同理用swift就可以怎么实现(当然要遵循Swift的规则)。所以如果你有OC基础的话学习Swift就会非常快的。
3.适应Swift的编程习惯,书写规范
4.如果以上三点都可以了,那就直接进入代码的练习了(最好是运用到实际的项目中)
下面就是我在学习Swift时写的一个demo(混合开发),供大家参考:
《demo功能:实现信息的列表展示,通过UITableView,自定义cell,封装网络请求+MD5加密,引入三方SDWebImage,MJReefresh》
在这里可以下载资源 demo下载
这里我主要是介绍一下在Swift中OC文件的引用和网络请求的封装
(1)网络请求的封装(运用MD5加密)
AsyncNetRequest.swift
import UIKit/**extension 和 OC 中的延展一样swift中的包和OC中的block相同**/// 类的延展 - 利用延展来将包定义成私有的宏extension AsyncNetRequest { typealias sendData = (data: NSData)->Void typealias sendError = (error: NSError)->Void}class AsyncNetRequest: NSObject { // 定义一个 var successed = sendData?() var failed = sendError?() required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override init() { super.init() } func startAsyncNetWorkWithURLString(urlStr: String, parameters: NSDictionary?, apiStr: String, sucess:(NSData)->Void, failed: (NSError)->Void) { self.successed = sucess self.failed = failed // 进行MD5处理 let MD5 = MD5Encrypt.init() let encryptString = MD5.MD5EncryptWithParameters(parameters, URLString: urlStr, api: apiStr) // 得到最终网络请求的字符串 let URLString = String(format:"%@?%@", urlStr, encryptString) let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() let session = NSURLSession.init(configuration: configuration) let url = NSURL.init(string: URLString) let request:NSMutableURLRequest = NSMutableURLRequest.init(URL: url!) request.HTTPMethod = "GET" let dataTask = session.dataTaskWithRequest(request) { (data, response, error) -> Void in if error == nil { self.successed!(data: data!) } else { self.failed!(error: error!) } } dataTask.resume() }}
(2)MD5加密类
import UIKitclass MD5Encrypt: NSObject { required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override init() { super.init() } // 获得当前时间戳 func dateWithNowSp()->String { let formatter: NSDateFormatter = NSDateFormatter.init() formatter.dateStyle = NSDateFormatterStyle.MediumStyle formatter.timeStyle = NSDateFormatterStyle.ShortStyle formatter.dateFormat = "YYYY-MM-dd HH:mm:ss" let timeZone:NSTimeZone = NSTimeZone.init(name: "Asia/Shanghai")! formatter.timeZone = timeZone let nowDate:NSDate = NSDate.init() // 将其它类型对象转换为字符串类型 - swift的灵活所在 let timeSp = String(nowDate.timeIntervalSince1970) return timeSp } // 对参数字典进行处理 func appendStringWithDictionay(parameters: NSDictionary?)->String { var parString:String = "" // 创建可变数组 let array:NSMutableArray = NSMutableArray() if parameters == nil { array.addObject("timestamp") } else { array.addObjectsFromArray((parameters?.allKeys)!) array.addObject("timestamp") } // 按照字母顺序排列 let arrayOfAppend = array.sortedArrayUsingSelector(Selector("caseInsensitiveCompare:")) // 逆行拼接计算 if arrayOfAppend.count > 0 { for key in arrayOfAppend { if !key.isEqualToString("timestamp") { // let lenght = parString.characters.count if lenght == 0 { parString = String(format:"%@=%@", key as!String, parameters?.objectForKey(key) as!String) } else { parString = String(format: "%@&%@=%@", parString, key as!String, parameters?.objectForKey(key) as!String) } } else { // 获取时间戳并且拼接到参数中 let timeSp = self.dateWithNowSp() if parString.characters.count == 0 { parString = String(format: "%@=%@", key as!String, timeSp) } else { parString = String(format: "%@&%@=%@", parString, key as!String, timeSp) } } } } // 返回拼接得到的字符串 return parString } // MD5进行加密 - 得到最后的拼接后的请求字符串 func MD5EncryptWithParameters(parameters: NSDictionary?, URLString: String, api: String)->String { let string = self.appendStringWithDictionay(parameters) // 用来加密的字符串 let appendString = String(format: "%@?%@%@", api, string, "huodongdawang_start_at_2015") let appendStrMd5: NSMutableString = NSMutableString() let orignal_str = appendString.cStringUsingEncoding(NSUTF8StringEncoding) let lenght = CUnsignedInt(appendString.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)) let results = UnsafeMutablePointer<CUnsignedChar>.alloc(Int(CC_MD5_DIGEST_LENGTH)) CC_MD5(orignal_str!, lenght, results) // for循环处理 for var i: Int = 0 ; i < Int(CC_MD5_DIGEST_LENGTH); i++ { appendStrMd5.appendFormat("%0.2x", results[i]) } let returnString = String(format: "%@&sign=%@", string, String(appendStrMd5)) return returnString }}
(3)Swift和OC混合编程-引入OC类
1--首先在Swift项目中创建一个继承与NSObject的类,注意要选择Objective-C语言,如图所示的 Create
2--点击Next,继续创建,这时候就会出现如图所示的选择提示,并点击创建
3--这时候你的文件中就会出现 项目名-Bridging-Header.h的文件(如果你用不到你创建的这个继承与NSObject的test类可以直接删除),如图所示
4--这样我们就可以在这个.h文件里引入我们想要引入的OC文件了,比如SDWebImage,MJRefresh的三方和你自己写的OC文件了。如图
这样就可以在你的Swift文件中调用这些三方来实现我们想要实现的功能了。
- 关于swift - 网络请求+MD5,混合编程
- Swift之网络编程-请求缓存
- Swift之网络编程-请求缓存
- swift混合编程
- swift oc 混合编程
- 关于c,c++,oc,swift的混合编程
- 关于swift,OC,C++混合编程(一)
- 关于swift,OC,C++混合编程(二)
- Swift之网络请求
- swift 网络请求 2
- Swift网络请求
- swift 网络请求
- Swift - 网络请求
- swift 网络请求
- swift网络请求封装
- ObjectiveC和Swift混合编程
- Swift和OC混合编程
- Swift、OC、C++混合编程
- 字符串模式匹配中BF算法和KMP算法的java实现
- android 基础 @SuppressLint("NewApi")和@TargetApi()的作用与区别
- 线段树
- sql基础知识-----主外键、参照完整性
- 个人能力怎么看?四个方面帮你量化UE&UI的绩效标准
- 关于swift - 网络请求+MD5,混合编程
- TCP可靠传输的实现
- Qt Gui使用(二)
- nctf-php
- SQLserver连接错误,错误代号2
- Ajax复选框多选删除的实现
- Swift 中枚举高级用法及实践
- WiBRAS宽带网络接入网关
- 附件下载功能