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閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容