• 主页
  • iOS
  • Flutter
  • Java
  • Markdown
所有文章 关于我

  • 主页
  • iOS
  • Flutter
  • Java
  • Markdown

Swift一些资料记录

2016-07-22

最近开始使用Swift写项目,这里记录一下一些Swift方面的开源库、学习资料以及小技巧.

开源库

Alamofire:Swift版本的AFNetworking
SnapKit:Swift版本的Masonry,AutoLayout自动布局
  • 简单使用:使用前先把view添加到父控件, 用法基本和Masonry相同
    1
    2
    3
    4
    5
    6
    7
    8
    self.addSubview(self.titleL)
    titleL.snp_makeConstraints(closure: { (make) -> Void in
    make.left.equalTo(30)
    make.right.equalTo(-30)
    //设置优先级priorityLow()
    make.bottom.equalTo(imageV.snp_top).offset(-50).priorityLow()
    make.top.greaterThanOrEqualTo(self).offset(84).priorityHigh()
    })
  • 除了equalTo()还有lessThanOrEqualTo()和greaterThanOrEqualTo()
  • 设置优先级 priorityLow()等
  • 比例 multipliedBy()和dividedBy(), 此时equal()里面的参数必须是自己本身的控件属性如:snp_width
  • snp_updateConstraints() 更新约束
  • snp_remakeConstraints 重新设置约束
  • snp_removeConstraints() 移除约束
SwiftyJSON:JSON的处理

小技巧

1. 使用Swift时,Release版本不希望打印输出,而Debug版本正常打印

  • 在Target—>Build Setting—>搜索Other Swift Flags—>在Debug 里面添加-D DEBUG
    添加步骤
  • 这样在项目中就可以使用下面的代码进行添加编译了
    1
    2
    3
    #if DEBUG
    #else
    #endif

附上我使用的自定义函数供大家参考:先按照上述步骤添加-D DEBUG,然后是定义一个全局函数HJLog

1
2
3
4
5
6
7
8
9
10
11
12
13
//Swift2.2后使用#line #file #function #column替换__LINE__等
//这里文件名file和行数line使用参数,并且给它默认值__FILE__等,这样在哪里调用就是哪个文件名和行数.而不能直接在函数中使用__FILE__等,不然打印出来都是HJLog所在的文件名和行数
func HJLog(items: Any..., file:String = __FILE__, line:Int = __LINE__, function:String = __FUNCTION__) {
#if DEBUG
//添加时间、文件名和行数
var fileString = "======时间:\(NSDate())" + " 文件名:\((file as NSString).lastPathComponent)" + " 函数名:\(function)" + " 行数:\(line)======\n"
for item in items {
fileString += (String(item) + " ")
}
print(fileString)
#else
#endif
}

效果图:自定义打印
当切换到Release版本下,HJLog就不再会打印了.一劳永逸~~

2. 在Swift中获取实例的类型,除了使用Objective-C中的方法,还可以使用
方法1:使用类名.self
方法2:使用类名.classForCoder(),只要是NSObject子类都可以使用
方法3:使用实例.classForCoder, 只要是NSObject对象都可以使用
方法4:使用实例.dynamicType, 但是在Swift中dynamicType是一个关键字

1
2
3
4
HJLog(HJTabBarController.self)                   //方法1:使用类名.self
HJLog(HJTabBarController.classForCoder()) //方法2:使用类名.classForCoder()
HJLog(self.classForCoder) //方法3:使用实例.classForCoder
HJLog(self.dynamicType) //方法4:使用实例.dynamicType

效果图:获取类型

3. Swift闭包中解决循环引用问题
方法1:使用OC类似的方法 weak var weakself = self
方法2:使用unowned,此时对象不能为nil
方法3:使用weak,此时对象可以为nil
使用方法2和方法3的时候,在闭包的参数列表前面使用[unowned self, weak button],多个对象使用逗号,隔开

1
2
3
4
5
window?.rootViewController = HJGuideController(closure: {[unowned self, weak window] () -> Void in
//weak var weakself = self //方法1
self.window?.rootViewController = HJTabBarController()
self.window?.makeKeyAndVisible()
})

  • 资料整理
  • iOS
  • Swift
Swift中使用runtime进行字典转模型时的一个注意点
UITableView的侧滑按钮和多行编辑
© 2023 coppco
Hexo Theme Yilia by Litten
  • 所有文章
  • 关于我

tag:

  • Shadowsocks
  • VPS
  • 翻墙
  • First
  • 杂谈
  • 新尝试
  • Java
  • Flutter
  • Dart
  • Elicpse
  • IDE
  • Shell
  • Linux
  • Markdown
  • 资料整理
  • iOS
  • Android
  • CentOS
  • GitLab
  • git
  • 持续集成
  • Intellij IDEA
  • JavaScript跨域
  • Jsonp
  • Dubbo
  • 分布式服务架构
  • HTML
  • JavaScript
  • jQuery
  • BootStrap
  • CSS
  • JDBC
  • MySQL
  • 数据库
  • XML
  • Tomcat
  • HTTP
  • Servlet
  • Request
  • Response
  • JSP
  • Cookie
  • Session
  • 事务
  • JavaBean
  • AJAX
  • JSON
  • Listener
  • Filter
  • 注解
  • Servlet3.0
  • RPM
  • nginx
  • JDK
  • Oracle
  • Hibernate
  • Struts2
  • Spring
  • SSM
  • MyBatis
  • SSH
  • Spring MVC
  • MQ
  • Redis
  • 策略模式
  • 全文搜索技术
  • Lucene
  • Solr
  • mirror
  • 镜像站
  • ruby
  • npm
  • Freemaker
  • 坑点
  • Cocoapods
  • Objective-C
  • Xcode
  • Swift
  • SwiftUI
  • Spring Boot
  • WebSocket
  • GCD
  • Swift3.0
  • App瘦身
  • iOS和JavaScript交互
  • iOS应用跳转
  • math
  • AutoLayout
  • Masonry
  • SnapKit
  • 三方框架的使用
  • Gitlab
  • 编程思想
  • 逆向工程
  • Delphi

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

iOS、Objective-C、Swift、Java、Flutter