ToolManager-FMDB-时间戳-云存储-图文混排

//
//  ToolManager.swift
//  MovieFansDemo1
//
//  Created by 余婷 on 16/9/27.
//  Copyright © 2016年 余婷. All rights reserved.
//

import UIKit

//MARK: - NSUserDefualts的Key
///当前用户名
let UD_CurrentUserName = "UD_CurrentUserName"
///当前的登录状态
let UD_LoginStatus = "UD_LoginStatus"

//MARK: - 全局变量
///屏幕宽度
let Screen_W = UIScreen.mainScreen().bounds.width
///屏幕高度
let Screen_H = UIScreen.mainScreen().bounds.height

//MARK: - 接口
///热映,参数:count(个数) page(分页)
let Url_HotShow = "http://ting.weibo.com/movieapp/rank/hot"

///预告,count(个数) page(分页)
let Url_Trailer = "http://ting.weibo.com/movieapp/rank/coming"

///影评,参数:count(个数)  type(1->热门影评, 0->最新影评)
let Url_FilmComment = "http://ting.weibo.com/movieapp/feed/list"

///影单,参数:count(个数) page(页数)
let Url_FilmList = "http://ting.weibo.com/movieapp/Pagelist/recommend"

///影单每一行,参数:page count id type(recommend) POST请求
let Url_FilmListLine = "http://ting.weibo.com/movieapp/Pagelist/recommendmovie"

///电影详情,参数:film_id(电影id)
let Url_FilmDetail = "http://ting.weibo.com/movieapp/page/base"

///演员详情
let Url_ActorDetail = ""

///代表作品
let Url_StandWorks = ""

///搜索,参数:search_key page count,方式:POST
let Url_Search = "http://ting.weibo.com/movieapp/search/search"

///筛选,参数:country type year count page
let Url_Screen = "http://ting.weibo.com/movieapp/search/film"

///长评详情,参数:type(long) id long_show(1)
let Url_LongReviewDetail = "http://ting.weibo.com/movieapp/feed/show"





//MARK: - 颜色的拓展
extension UIColor{

    ///通过0-255的RGB值去创建一个颜色对象
    static func RGBColor(R:CGFloat,G:CGFloat,B:CGFloat,A:CGFloat) -> UIColor{
    
        return UIColor.init(red: R/255, green: G/255, blue: B/255, alpha: A)
    }
    
    static func randomColor()->UIColor{
    
        let colorValue = [(108,209,0),(255,128,0),(204,102,155),(102,255,255),(255,240,70)]
        let i = Int(arc4random()%5)
        let rgbValue = colorValue[i]
        return self.RGBColor(CGFloat(rgbValue.0), G:CGFloat(rgbValue.1), B: CGFloat(rgbValue.2), A: 1)
        
    }
}
//MARK: - 数据库相关
extension ToolManager{
    //数据库的使用步骤
    ///创建/打开数据库
    static func openDataBase(){
    
        let db = self.default_db
        let ret = db.open()
        if ret {
            
            print("数据库打开成功")
        }else{
        
            print("数据库打开失败")
        }
    }
    ///创建表
    static func creatTable(tableName:String){
        //0.打开数据库
        self.openDataBase()
    
        //1.创建sql语句
        let sql = "CREATE TABLE IF NOT EXISTS t_\(tableName)(id integer PRIMARY KEY AUTOINCREMENT,filmName text,imageUrl text,film_id text);"
        //2.执行sql
       let ret = self.default_db.executeUpdate(sql, withArgumentsInArray:[])
        if ret {
            print("表创建成功")
        }else{
            print("表创建失败")
        }
    }
    
    //3.增、删、改、查
    ///插入数据
    static func insertData(model:FilmDetailHeaderModel,userName:String){
        //创建表
        self.creatTable(userName)
        //sql语句
        let sql = "INSERT INTO t_\(userName)(filmName,imageUrl,film_id) VALUES (?,?,?);"
        
        //执行sql语句
        let ret = self.default_db.executeUpdate(sql, withArgumentsInArray: [model.name,model.poster_url,model.film_id])
        if ret {
            print("插入成功")
        }else{
        
            print("插入失败")
        }
        
    }
    ///根据电影id去查询
    static func isCollectionBefor(filmId:String,userName:String)->Bool{
        
        //打开数据库
        self.openDataBase()
        self.creatTable(userName)
        //查询数据
        let sql = "SELECT * FROM t_\(userName) WHERE film_id=?;"
        let dataSet = self.default_db.executeQuery(sql, withArgumentsInArray: [filmId])
        
        //只要查询到结果,就返回true
        while dataSet.next() {
            
            return true
        }
        
        //没有查询到结果
        return false
        
    }
    
    ///查询数据
    static func getAllData(userName:String)->[FilmDetailHeaderModel]{
        //打开数据库
        self.openDataBase()
        //sql语句
        let sql = "SELECT * FROM t_\(userName);"
        //执行sql语句
        let dataSet = self.default_db.executeQuery(sql, withArgumentsInArray: [])
        //遍历获取结果
        var retuanArray = [FilmDetailHeaderModel]()
        while dataSet.next() {
            
            //取到数据库中的数据
            let name = dataSet.objectForColumnName("filmName") as! String
            let imageUrl = dataSet.objectForColumnName("imageUrl") as! String
            let filmId = dataSet.objectForColumnName("film_id") as! String
            //创建模型对象
            let model = FilmDetailHeaderModel()
            model.name = name
            model.poster_url = imageUrl
            model.film_id = filmId
            //保存到数组中
            retuanArray.append(model)
        }
        
        return retuanArray
    }
}
//MARK: - 通用方法
class ToolManager: NSObject {
    
    static let default_db = FMDatabase.init(path:NSHomeDirectory()+"/Documents/User.db")

    ///计算指定字符串的大小
    static func calculateStringSize(str:String,maxW:CGFloat,maxH:CGFloat,fontSize:CGFloat) -> CGSize{
        //1.将字符串转换成OC的字符串
        let ocStr = str as NSString
        //2.计算
        return ocStr.boundingRectWithSize(CGSizeMake(maxW, maxH), options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName:UIFont.systemFontOfSize(fontSize)], context: nil).size
        
    }
    
    
    ///图文混排
    //NSAttributedString 富文本
    static func mixImageAndText(imageName:String,text:String)->NSAttributedString{
        //1.将图片转换成富文本
        let attach = NSTextAttachment.init()
        attach.image = UIImage.init(named: imageName)
        let imageAttr = NSAttributedString.init(attachment: attach)
        
        //2.将字符串转换成富文本
        let textAttr = NSAttributedString.init(string: text)
        
        //3.将图片富文本和文字富文本拼接成一个富文本
        //a.创建一个可变的富文本对象
        let mutableAttr = NSMutableAttributedString()
        //b.拼接
        mutableAttr.appendAttributedString(imageAttr)
        mutableAttr.appendAttributedString(textAttr)
        
        return mutableAttr
        
    }
}

//MARK: - 时间相关
extension ToolManager{

    ///将时间秒转换成00:00格式的字符串
    static func transformTime(time:CGFloat)->String{
    
        //获取分
        let minute = Int(time) / 60
        var minutestr = ""
        if minute<10 {
            
            minutestr = "0\(minute)"
        }else{
        
            minutestr = "\(minute)"
        }
        //获取秒
        let second = Int(time)%60
        var secondstr = ""
        if second < 10 {
            
            secondstr = "0\(second)"
        }else{
        
            secondstr = "\(second)"
        }
        
        return "\(minutestr):\(secondstr)"
    }
    
    ///计算指定时间戳对应的时间到当前时间的时间差
    static func getTimeDifference(time:NSTimeInterval)->String{
        //将时间戳转换成时间
        let date = NSDate.init(timeIntervalSince1970:time)
        //算指定时间到当前时间之间的差值(单位:秒)(将时间转换成时间戳)
        let currentDifference = date.timeIntervalSinceNow
        
        //将时间差转换成天/时/分
        let currentDifference2 = -currentDifference
        
        //天
        let day = currentDifference2/60/60/24
        if day >= 1 {
            
            //约束小数点后只有0位
            let dayStr = String(format: "%.0f",day)
            return "\(dayStr)天前"
        }
        
        //时
        let hour = currentDifference2/60/60
        if hour >= 1{
            let hourStr = String(format: "%.0f",hour)
            return "\(hourStr)小时前"
        }
        
        //分
        let minute = currentDifference2/60
        if minute >= 1 {
            let minuteStr = String(format: "%.0f",minute)
            return "\(minuteStr)分钟前"
        }
       
        //秒
        let currentStr = String(format: "%.0f",currentDifference2)
        return "\(currentStr)秒前"
    }
}

//MARK: - 云存储相关
extension ToolManager{

    ///将账号和密码存储到云数据库中
    static func BmobUserRegister(userName:String,passWord:String,result:(Bool,String)->Void){
        //确定存储账号和密码对应的表名:UserInfo
    
        //1.判断当前账号是否已经注册过
        let query = BmobQuery.init(className: "UserInfo")
        //按照注册的用户名去查找是否已经注册过
        query.whereKey("userName", equalTo: userName)
        query.findObjectsInBackgroundWithBlock { (allObject, error) in
            
            //判断查询结构
            if allObject.count == 0{
                 //2.在账号没有注册过的前提下去保存账号和密码
                //1.常见数据对象
                let objct = BmobObject.init(className: "UserInfo")
                //2.设置数据
                objct.setObject(userName, forKey: "userName")
                objct.setObject(passWord, forKey: "passWord")
                //3.保存
                objct.saveInBackgroundWithResultBlock { (ret, error) in
                    
                    if ret{
                        result(true,"注册成功")
                    }else{
                        
                        result(false,"注册失败")
                    }
                }
            }else{
                result(false,"账号已经被注册")
            }//判断查询结果结束
        }//查询结束
    }//函数结束
    
    

    ///判断账号密码是否正确
    static func BmobUserLogin(userName:String,passWord:String,result:(Bool,String)->Void){
    
        //1.通过用户名去查找数据
        let query = BmobQuery.init(className: "UserInfo")
        //添加约束条件
        query.whereKey("userName", equalTo: userName)
        //开始查找
        query.findObjectsInBackgroundWithBlock { (allObjects, error) in
           
            //判断查询结果
            if allObjects.count == 0{
                //账号错误
                result(false,"账号错误")
            }else{
                //账号正确
                //a.取到唯一的账号信息对象
                let object = allObjects.first as! BmobObject
                //b.取出密码
                let pass = object.objectForKey("passWord")
                //c.判断密码是否正确
                if pass as! String == passWord{
                    //登录成功
                    result(true,"登录成功")
                }else{
                    //密码错误
                    result(false,"密码错误")
                }
                
            }//判断查询结束
        }//查询结束
    }//函数结束
}



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容