网络使用的是第三方库AFNetworking 3.x
// // KimreeNetTool.swift // StopSmokingPrograms // // Created by Fran on 15/10/7. // Copyright © 2015年 kimree. All rights reserved. // import UIKit public enum KMNetMethod: String{ case GET = "Get" case POST = "Post" } public class KMNetTool: NSObject{ // using AFNetworking 3.x public static var KM_NET_MANAGER: AFHTTPSessionManager{ let manager = AFHTTPSessionManager() manager.requestSerializer = AFJSONRequestSerializer() manager.responseSerializer = AFJSONResponseSerializer() manager.requestSerializer.timeoutInterval = 10 return manager } // 异步请求 class func asyncNetworkWithMethod(method: KMNetMethod = .POST,urlString: String, params: AnyObject?, progressBlock: ((NSProgress) -> Void)?, completeBlock:((NSURLSessionDataTask?, AnyObject?, NSError?) -> Void)? ){ let manager = KM_NET_MANAGER switch method{ case .POST: manager.POST(urlString, parameters: params, progress: { (progress: NSProgress) -> Void in progressBlock?(progress) }, success: { (task: NSURLSessionDataTask, responseObj: AnyObject?) -> Void in completeBlock?(task, responseObj, nil) }) { (task: NSURLSessionDataTask?, error: NSError) -> Void in completeBlock?(task, nil, error) } case .GET: manager.GET(urlString, parameters: params, progress: { (progress: NSProgress) -> Void in progressBlock?(progress) }, success: { (task: NSURLSessionDataTask, responseObj: AnyObject?) -> Void in completeBlock?(task, responseObj, nil) }) { (task: NSURLSessionDataTask?, error: NSError) -> Void in completeBlock?(task, nil, error) } } } // 同步请求 class func syncNetworkWithMethod(method: KMNetMethod = .POST,urlString: String, params: AnyObject?, progressBlock: ((NSProgress) -> Void)?, completeBlock:((NSURLSessionDataTask?, AnyObject?, NSError?) -> Void)?){ let manager = KM_NET_MANAGER var rsTask: NSURLSessionDataTask? var rsResponseObj: AnyObject? var rsError: NSError? manager.completionQueue = dispatch_queue_create("AFNetworking_SyncQueue", nil) let semaphore = dispatch_semaphore_create(0) switch method{ case .POST: manager.POST(urlString, parameters: params, progress: { (progress: NSProgress) -> Void in dispatch_async(dispatch_get_main_queue(), { () -> Void in progressBlock?(progress) }) }, success: { (task: NSURLSessionDataTask, responseObj: AnyObject?) -> Void in rsTask = task rsResponseObj = responseObj rsError = nil dispatch_semaphore_signal(semaphore) }) { (task: NSURLSessionDataTask?, error: NSError) -> Void in rsTask = task rsError = error dispatch_semaphore_signal(semaphore) } case .GET: manager.GET(urlString, parameters: params, progress: { (progress: NSProgress) -> Void in dispatch_async(dispatch_get_main_queue(), { () -> Void in progressBlock?(progress) }) }, success: { (task: NSURLSessionDataTask, responseObj: AnyObject?) -> Void in rsTask = task rsResponseObj = responseObj rsError = nil dispatch_semaphore_signal(semaphore) }) { (task: NSURLSessionDataTask?, error: NSError) -> Void in rsTask = task rsError = error dispatch_semaphore_signal(semaphore) } } dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER) completeBlock?(rsTask, rsResponseObj, rsError) } }
常用操作数据:
// MARK: - bundle infoDictionary var KM_BUNDLE_INFO_DICTIONARY: [String : AnyObject]?{ get{ let infoDictionary = NSBundle.mainBundle().infoDictionary return infoDictionary } } // MARK: - local version 本地版本号 let KM_LOCAL_VERSION: String = { var version = "1.0" let dic = KM_BUNDLE_INFO_DICTIONARY let localVersionString = dic?["CFBundleShortVersionString"] as? String if localVersionString != nil{ version = localVersionString! } return version }() // MARK: - remote version, need AFNetworking appstore版本号 let KM_REMOTE_VERSION: String = { // 远程版本信息只需要获取一次,如果获取失败,则使用本地版本 var version = KM_LOCAL_VERSION KMNetTool.syncNetworkWithMethod(.POST,urlString: KM_API_APP_REMOTE_INFO, params: nil, progressBlock: nil, completeBlock: { (task: NSURLSessionDataTask?, responseObj: AnyObject?, error: NSError?) -> Void in if error == nil{ let dic = responseObj as? NSDictionary let results = dic?["results"] as? NSArray if results != nil && results!.count > 0{ let result = results![0] as! NSDictionary version = result["version"] as! String } }else{ KMLog("KM_REMOTE_VERSION : (error!.localizedDescription)") } }) return version }() // MARK: - need update 是否需要更新。 由于只会取一次远程版本,所以这里只需要判断一次就可以了 let KM_VERSION_NEED_UPDATE: Bool = { let localVersion = KM_LOCAL_VERSION let remoteVersion = KM_REMOTE_VERSION var update = false if localVersion.compare(remoteVersion, options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedAscending{ update = true } // let local = localVersion.componentsSeparatedByString(".") // let remote = remoteVersion.componentsSeparatedByString(".") // // let length = min(local.count, remote.count) // for i in 0..<length{ // let localV = (local[i] as NSString).doubleValue // let remoteV = (remote[i] as NSString).doubleValue // if remoteV > localV{ // verEqual = false // update = true // break // }else if remoteV == localV{ // verEqual = true // continue // }else{ // verEqual = false // update = false // break // } // } // if verEqual{ // if remote.count > local.count{ // update = true // } // } return update }() // MARK: - 自定义log。 // 在 Swift 项目里也和 Objective-C 一样使用 DEBUG 来区分 Debug 和 Release,我们只需要到 Target 的 Build Settings 里面,找到 Swift Compiler Custom Flags,在 Debug 处传入一个 -D DEBUG 即可。 func KMLog(format: String, args: CVarArgType...){ #if DEBUG NSLogv(format, getVaList(args)) #else // NO LOG #endif } func KMLog(format: String){ KMLog(format, args: []) } // MARK: - appDelagate var KM_APP_DELEGATE: AppDelegate{ get{ return UIApplication.sharedApplication().delegate as! AppDelegate } } // MARK: - user defaults var KM_USER_DEFAULTS: NSUserDefaults{ get{ return NSUserDefaults.standardUserDefaults() } } // MARK: - base frame let KM_FRAME = UIScreen.mainScreen().bounds let KM_FRAME_WIDTH = KM_FRAME.size.width let KM_FRAME_HEIGHT = KM_FRAME.size.height
RGB颜色获取:
func RGBA(red: CGFloat, _ green: CGFloat, _ blue: CGFloat, _ alpha: CGFloat) -> UIColor{ return UIColor(red: red / 255, green: green / 255, blue: blue / 255, alpha: alpha) } func RGB(red: CGFloat, _ green: CGFloat, _ blue: CGFloat) -> UIColor{ return RGBA(red, green, blue, 1.0) }