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 } 複製程式碼
9. 毛玻璃 - 高斯模糊
-
Vleual Effect View 選擇,extra Light 就可以
-
子檢視新增在View上,並且不透明
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() } 複製程式碼
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)") 複製程式碼
14.過濾陣列 - 尾隨閉包的簡單寫法
- OC 中過濾陣列,使用謂詞
- swift 中,過濾使用filter, P是陣列,判斷陣列中的模型的一個屬性的值是不是相等
-
直接過濾
-
尾隨閉包:
-
如果是尾隨閉包只有一句,並且是返回,閉包格式可以省略,引數省略之後,可以使用0,1….以此替代原有的引數
-
return 也可以省略
-
15.測試正規表示式
-
匹配中間帶【】的字元,任何字元都行
-
字元中 【】() 是正規表示式的關鍵字,如果參與匹配,需要轉義
-
匹配所有項
-
for迴圈所有項,根據所有項所在的range,匹配出字串
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) 複製程式碼
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); } 複製程式碼