swift學習筆記《3》-技巧

ytmaylover發表於2018-09-05

1.swift列印

  • 自定義printLog
    func printLog<T>(message : T, fileName : String = __FILE__, lineNum : Int = __LINE__) {
    
        #if DEBUG
        // 處理fileName
        let file = (fileName as NSString).lastPathComponent
        print("\(file):[\(lineNum)]")
        #endif
    }
    複製程式碼

2.獲取名稱空間

  • let nas = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String

3.try 的三種方式

  • JSONObjectWithData(data: NSData, options opt: NSJSONReadingOptions)函式會丟擲異常

  • throws 需要用try 獲取

  • try 需要用do catch 錯誤放在catch 中的error中

    do { 
    let aaa = try  JSONObjectWithData()
    }catch{ 
        print(\(error)) 
    }
    複製程式碼
  • try? 如果沒有值,返回nil 返回值是可選型別

  • try!相當於告訴系統一定沒有異常,發生異常會崩潰

4.storyBoard Refrence

  • 方式1

  • 選中需要的控制器

  • 選擇導航條的editor

  • 選擇下拉選單 refector to sroryboard

  • 方式2

  • 在控制元件庫中拖入storyboard refrence

  • 新建一個storyboard

  • 點選storyboard refrence 關聯到建立的storyboard,

  • 原來的控制元件中就可以與 storyboard refrence 連線跳轉

5.swift封裝 AFN

  • 設定網路工具列舉 POST,GET
    enum RequestMothod:String {
    case POST = "POST"
    case GET = "GET"
    }
    複製程式碼
  • 封裝網路請求單例類
    class NetworkTools : AFHTTPSessionManager {
        static let  shareTools : NetworkTools = {
            let  tools =  NetworkTools()
            tools.responseSerializer.acceptableContentTypes?.insert("text/plain")
            return tools
        }
    }
    複製程式碼
  • AFN 內部方法的封裝
  • 封裝POST,GET 用一個方法封裝
  • 使用關鍵字 typealias 設定方法的block ,引數是返回值,錯誤資訊,返回值是空(rest:Any,error:Error )->()
  • 定義方法中的引數,type ,urlstring ,pramas, 上面的回撥的block
  • 在方法中定義成功的閉包,失敗的閉包,用於傳進AFN的方法引數,
    // 內部封裝AFN 請求
    
    extension AFNNetWorkTool {
    
        //typealias callBack = (_ aresult:AnyObject?,_ erro:Error)->()
        func afnRequest(methodType:AFNnetRequsetType,urlString:String,parames:[String:AnyObject]?,finished:@escaping (_ result:Any?,_ error:Error?)->()){
            // 定義成功的回撥
            let seccessBlck = { (task:URLSessionDataTask,resuurt:Any?)->() in
                finished(resuurt,nil)
            }
    
            // 定義失敗的回撥
            let faitureBlock = { (tast:URLSessionDataTask?,error:Error)->() in
                finished (tast,error)
            }
    
            if methodType == .GET {
                get(urlString, parameters: parames, progress: nil, success: seccessBlck, failure: faitureBlock)
    
            }else{
                post(urlString, parameters: parames, progress: nil, success: seccessBlck, failure: faitureBlock)
    
            }
        }
    }
    複製程式碼

6 Alamofire 監測網路

  • 使用alamofire 監測網路狀況
    let NetworkManager = NetworkReachabilityManager(host: "www.baidu.com")
    NetworkManager!.listener = { status in
        print("") 
        switch status {
            case .NotReachable: 
                print("")  
            case .Unknown:  
                print("")  
            case .Reachable(.EthernetOrWiFi): 
                print("") 
            case .Reachable(.WWAN):  
                print("")  
        }  
    }
    NetworkManager!.startListening() 
    複製程式碼

7.UIWebView 自動填充賬戶密碼

  • 每次輸入網頁需要填充賬戶名密碼十分麻煩,結合safari開模擬檢視網頁上標籤
    let js = "document.getElementById('userId').value = '1606020376@qq.com';" +
        "document.getElementById('passwd').value = 'haomage';"
        webView.stringByEvaluatingJavaScriptFromString(js)
    複製程式碼

8.雙擊底部tabbarItem重新整理資料

  • 判斷索引是當前,並且將要點選是當前

  • 讓滑倒頂部

  • 重新整理資料,延遲載入

  • 清除角標

    let index = childViewControllers.index(of: viewController)
    if selectedIndex == 0 && selectedIndex == index{
        let nav  = childViewControllers[0] as! UINavigationController
        let vc = nav.childViewControllers[0] as! HomeVC
        vc.tableView?.setContentOffset(CGPoint(x: 0, y: -64), animated: true)
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1 , execute: {
            vc.loadData()
        })
        vc.tabBarItem.badgeValue = nil
        UIApplication.shared.applicationIconBadgeNumber = 0
    }
    複製程式碼

    swift學習筆記《3》-技巧

9. 毛玻璃 - 高斯模糊

  • Vleual Effect View 選擇,extra Light 就可以

  • 子檢視新增在View上,並且不透明

    swift學習筆記《3》-技巧

10.POP 基本概念

  • 支援3種動畫型別
    • 彈力動畫POPSPringAnimation
    • 衰減動畫 POPDelayAnimation
    • 基本動畫 POPBasicAnimation
  • 如果需要做延時動畫需要如下程式碼
    // 5秒之後的延遲
    anim.beginTime = CACurrentMediaTime( ) + CFTimeInterval ( 5)
    複製程式碼

11.Block 的延時執行,需要的時候再執行

  • 當前方法不能執行,使用屬性記錄,在需要的時候再執行
    // 定義一個屬性,是可選的閉包,
    // 閉包有引數無返回值 
    private var comlentionBlock:( (clasName:String? ) -> ( ) )?
    複製程式碼
  • 當屬性引用閉包,閉包右修改了屬性,必發生迴圈引用,在閉包中使用【weak self】

12.單例方法嚴謹

  • 單例如果呼叫了init方法,和share方法,得到的是不同的物件,

  • init 用private 修飾,外部只能使用share 方法

    static let share = CZEmotionManager()
    private init() {
        loadPackAges()
    }
    複製程式碼

    swift學習筆記《3》-技巧

13.載入bundle中的圖片素材

  • 通過mainBundle,找到素材bundle

  • 找到素材plist的path,plist轉為陣列

    guard let path  = Bundle.main.path(forResource: "HHEmotion.bundle", ofType: nil),
                let bundle  = Bundle(path: path) ,
                let plistpath = bundle.path(forResource: "emotion.plist", ofType: nil),
                let arry  = NSArray(contentsOfFile: plistpath) as? [[String:String]] else {
                return
            }
    print("\(arry)")
    複製程式碼

    swift學習筆記《3》-技巧

14.過濾陣列 - 尾隨閉包的簡單寫法

  • OC 中過濾陣列,使用謂詞
  • swift 中,過濾使用filter, P是陣列,判斷陣列中的模型的一個屬性的值是不是相等
    • 直接過濾

      swift學習筆記《3》-技巧

    • 尾隨閉包:

      swift學習筆記《3》-技巧

    • 如果是尾隨閉包只有一句,並且是返回,閉包格式可以省略,引數省略之後,可以使用0,1….以此替代原有的引數

      swift學習筆記《3》-技巧

    • return 也可以省略

      swift學習筆記《3》-技巧

15.測試正規表示式

  • 匹配中間帶【】的字元,任何字元都行

  • 字元中 【】() 是正規表示式的關鍵字,如果參與匹配,需要轉義

  • 匹配所有項

  • for迴圈所有項,根據所有項所在的range,匹配出字串

    swift學習筆記《3》-技巧

16.圖片拉伸處理

  • 根據圖片的size,設定拉伸的rect
  • 拉伸圖片
    var image = UIImage(named: "ceshiimage")
    let size  = image?.size ?? CGSize()
    let inset = UIEdgeInsetsMake(size.height*0.5, size.width*0.5, size.height*0.5, size.width*0.5)
    image = image?.resizableImage(withCapInsets: inset)
    複製程式碼
    swift學習筆記《3》-技巧

17.UIColor 16進位制轉RGB

  • 寫分類
  • 根據16進位制 位運算,有移得出相對應的RGB的數值
  • 生成顏色
    static func jy_colorWithHex(hex:u_int)->UIColor{
    
        let red = Float((hex & 0xFF0000) >> 16)
    
        let green = Float((hex & 0x00FF00) >> 8)
    
        let blue = Float(hex & 0x0000FF)
    
        return UIColor.init(colorLiteralRed: red/255.0, green: green/255.0, blue: blue/255.0, alpha: 1.0);   
    
    }
    複製程式碼
    swift學習筆記《3》-技巧

相關文章