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); } 复制代码