• Swift项目开发中的一些必备数据


    网络使用的是第三方库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)
    }
    

      

      

  • 相关阅读:
    9. 远程分支与本地分支管理
    8. Git 远程协作
    7. Git stash命令
    6. Git版本处理
    5. Git 本地分支命令
    4. Git 日志命令
    JVM垃圾回收分析
    python常用模块
    ubuntu18配置jetty9
    logback spring配置
  • 原文地址:https://www.cnblogs.com/FranZhou/p/5066622.html
Copyright © 2020-2023  润新知