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)
}

  

  

原文地址:https://www.cnblogs.com/FranZhou/p/5066622.html