swift开发常用技巧
来源:互联网 发布:微艾薇h5建站 编辑:程序博客网 时间:2024/05/16 12:49
一、swift新元素
1、柯里化
可以把接受多个参数的方法变换成接受第一个参数的方法,并且返回接受余下参数、返回结果的新方法
funcaddTwoNumbers(a:Int)(num:Int) -> Int {
return a + num
}
letaddToFour = addTwoNumbers(4)
letresult = addToFour(num:6)
2、多元组
在写库的时候可以考虑直接返回一个带有NSError的元组,而不是将Error的指针当作参数传入
3、@autoclosure
把一句表达式自动的封装成一个闭包
如??:当左侧为非nil的Optional值时返回其value,否则返回右侧的值
4、操作符
如果新建一个不存在的操作符,需要先使用infix等定义这个操作符
5、func的参数修饰
func内的参数默认是使用let来修饰的,即不可改变的,若要改变形参的值需使用var来定义参数
6、typealias
对已存在的类型重命名,类似DEFINE
7、可变参数
若函数参数个数不定,可使用…来表示可变参数,如
funcsum(input: Int…) -> Int {}
8、初始化方法顺序
一般来说,子类的初始化顺序是:
1、设置子类自己需要初始化的参数
2、调用父类的相应的初始化方法
3、对父类中的需要改变的成员进行设定
9、designated、convenience、required关键字的初始化方法差异
#TODO
10、…和..<
…表示闭合区间,..<则是前闭后开区间
他们是泛型操作符,不止可以作用于整形,还可以作用于String,如"a"…"z"
11、AnyClass、元类型和.self
AnyClass为元类型,被如下定义:
TypealiasAnyClass = AnyObject.Type
A.Type代表A这个类的类型表示
而如果要取得A的实际类型则要用A.self
即let typeA:A.Type = A.self
12、接口和类方法中的Self
这里的Self的S是大写的,指的是类本身的类型,而非类具体的实例
13、属性观察、监视
didset、willset
14、final关键字
可用于class、func、var前面进行修饰,表示不允许对该内容进行继承或者重写
15、lazy关键字
lazy关键字用来声明一个延时加载的变量,使用时只能生命属性是变量并显式的指明类型,还要给出一个对变量进行赋值的语句用来在首次访问属性时运行
lazy varstr: String = {return 'abc'}()
16、find方法
find方法用来查找对象,如find(arr, 2)查找2在数组arr中的位置
17、Reflection和MirrorType
#TODO反射和镜像
18、多重optional
optional类型可以作为任何类型的容器,包括它自己,即允许Optional<Optional<String>>,Optional容器允许装入的类型有nil、已知类型和Optional自己
19、map方法
array类型包含了map方法,即可通过map中定义的函数来实现数组到另一个数组的映射,这个方法同样存在于Optional类型中,即可对任何Optional对象进行函数变换
二、从Objective-C到swift
20、实例方法的动态调用
swift的实例方法有类似python中实例方法的调用方式,可以通过Class.func(Object)(args)的方式来动态调用
21、单例
用struct来存储类型变量,出现sharedInstance
22、条件编译
#if<condition>
#elseif<condition>
#else
#endif
23、编译标记
// MARK:xxx
名称将显示在导航栏中便于快速定位
24、@objc和dynamic
Objective-c中引用swift
protocol中定义可选接口时需要在接口前加上@objc前缀
25、weak
使用weak关键字定义变量,向编译器表明不希望持有该变量,可防止循环引用
若类中存在闭包引用了self属性,则应使用[weak self] in以防止闭包和对象本身循环应用
26、autoreleasepool
#TODO
27、值类型和引用类型
内置数据类型几乎都是值类型,包括Array和Dictionary
28、Foundation框架
通过导入Foundation框架后,swift的类型和Foundation的类型自动相互转换,及String和NSString、Array和NSArray等
29、unsafepointer
指针的swift转换
C指针内存管理
#TODO
30、GCD
#TODO
31、获取对象的类型
可通过.dynamicType来获取对象的类型
32、类型判断
if (obj_a isclassA) {}
33、类型转换
在as后面加一个?可以在类型转换失败时返回一个nil
34、判等
==:值判断,可重载Equatable方法来实现
===:引用判断
35、哈希
重载Hashable方法可实现类型的哈希支持
36、调用C动态库
swift本身无法直接调用C库,蛋objective-c可以,所以可通过先bridging-header,然后通过objective-c来引用C库
37、输出格式化
由于swift没有例如%2f这种的格式化字符,所以只能先通过String的format方法对字符进行格式化,然后println出来
38、性能提升
应在swift的性能敏感或关键代码部分,尽量避免使用objective-c或NSObject的子类,保持在swift的基本类型中会使得性能有所提升
39、enumerate
同python的enumerate方法
40、sizeof和sizeofValue
#TODO
41、delegate
可以通过在protocol声明的名字后面加上关键字class来指明这个protocol只能由class来实现,即:
protocolMyClassDelegate: class {}
42、Lock
swift的线程锁
objective-c可以通过@synchronized关键字来修饰变量为其自动加上互斥锁
而swift不支持该关键字,可以通过objc_sync_enter(anObj)来实现
三、swift与开发环境、实践
43、fatalError
#TODO
44、playground
延时运行:使用XCPlayground框架可以达到延时运行的效果
可视化:使用XCPlayground的XCPCaptureValue方法可以将一组数据绘制到时间轴上
导入当前项目:在项目中加入playground,即可与项目进行协作
限制:性能、内存管理
45、JSON
swift没有很好地处理json的方式,可通过json-swift项目来通过重载下标的方式简化JSON操作
46、文档注释
方法的文档字符串应如下格式:
/**
A demomethod
:param:input an Int number
:returns:the string represents the input number
*/
funcmethod(input: Int) -> String{}
47、Log输出
#TODO
48、属性访问控制
Private
Public
Internal
49、泛型扩展
扩展泛型类型,无需再生命<T>,也不允许如此声明,直接在扩展中使用T即可
- swift开发常用技巧
- swift常用开发库
- swift 开发 - 常用函数
- swift开发常用库
- [Swift 开发] GCD常用方法
- VC常用开发技巧
- Asp开发常用技巧
- 常用开发技巧
- VS开发常用技巧
- android开发 常用技巧
- php开发常用技巧
- C#常用开发技巧
- Web开发常用技巧
- iOS开发常用技巧
- Mac开发常用技巧
- Swift开发的几个小技巧
- OC与Swift混合开发技巧
- iOS开发技巧系列 使用Swift反射
- 【airflow实战系列】 基于 python 的调度和监控工作流的平台
- Treiber stack
- swift开发常用库
- 剑指offer-反转链表
- Spring学习笔记(二)
- swift开发常用技巧
- 推荐YAML教程
- ByteBuffer 使用与理解
- python下读取xls文件与csv文件
- 我的世界史蒂夫---熊孩子版
- Java面试题集(三)
- 中国剩余定理
- JQuery基础
- 生成器