标签:
1 在当前类中,实例方法调用属性以及方法都可以将self省略掉,而且是建议省略
2 selector是调用方法写法是:Selector("sayHello")或者是#selector(sayHello)
3 swift中不同类型的值之间不能直接做运算,所以不同类型值做运算的时候需要对值进行类型转化,都转化至同一类型之后方可做运算
4 可选类型
如果一个变量可能有值也可能为空,那么这个变量就是属于可选类型。可选类型在变量的数据类型后边加上?
,比如var str:String?
1 可选类型的值不能直接参与运算,需要强行解包之后才能使用,使用 `!` 2 标识强行解包某个可选类型的值。使用`!`一定要确定该值不为`nil`才可 3 以对这个值进行强制解包,如果对`nil`进行强制解包的话程序会崩溃
5 控制流
if--let
if-let一般用于可选类型变量的判断 if let n = name{ //当name有值的时候会定一个常量n去记录此时这个可选类型的值 并且能够进入到判断语句代码块中 }
如果变量name没有值的话继续往下面执行
if-let-where
if-let-where用法类似于if-let,多了一个判断 1. where 就是给前面定义出来的常量再添加一个判断 (where 后面的执行语句的执行结果必须为 true/false) 2. 如果需要在 if let 中更改定义的常量(其实需要将其改成变量),只需要将 let 改成 var就可以了
guard
guard比if-let少了一层代码嵌套 guard var n = m else{ 当变量m的值为空的时候执行这里的代码块,执行结束之后return出去 ........ return } 不为空的话往下执行 printf(n)
6 switch
不写break不会产生贯穿的现象,所以break可以不写
case可以判断任意类型(包括字符串等),不再像OC一样只能判断整型
在 case 中不用写 {}
指定变量的作用域,但是每一个case后面都需要有执行代码
7 必选属性与可选属性
必选属性需要在对象初始化完成之前必须有值
如果是在构造函数之前给其赋值初始化的话,就必须在super.init()
之前
基本数据类型如果为可选类型的话,默认值是nil
8 swift细化了属性的类型
存储类型
存储实例的变量和常量,与类,结构体,枚举相关
计算属性
并不存储实际的值,而是通过一个setter与getter方法来间接的获取和设置属性的值
类型属性
类型属性与类相关而不是与实例相关,对于某一类型的实例,类型属性都只有一份拷贝,类型属性只能通过类型来获取和操作9 set方法与get方法
set方法写法
var 变量名:变量类型?{ didSet{ set内容 } }
对于get方法
swift推荐使用懒加载,在swift中懒加载有固定的写法
lazy var 变量名:变量类型 = {//懒加载必须指明变量类型 创建变量 ....... return 变量 }()
手动实现变量的set
与get
方法
var 变量名:变量类型?{ didSet{ set方法设置的内容 } get{ return ... } }
10 重写init(frame:CGRect)
方法
init?(coder aDecoder: NSCoder)
。否则会报错,这是因为采用纯代码重写了init方法,在以后的代码迭代的时候有可能会采用xib的方式,当采用xib的方法会执行init?(coder aDecoder: NSCoder)
方法11 swift中单例写法
static let singleInstance:类名 = { let instance = 类名() return instance }()或者 static let instance = 类名() let singleInstance:类名 = { return instance }
12 swift中遍历数组时候必须明确数组里面元素的类型
for item in array as! [String:Anyobject] { }
13 根据字符串动态创建类实例:
swift中类进行实例初始化的时候会根据工程名称在类名前加上命名空间再初始化,所以根据一个类名字符串创建实例需要先获取类名空间
nameSpace.类名
nameSpace
一般是工程名,可以通过下面获取:
let namespace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
14 异常捕获try throw
try catch是swift对错误地处理,只要有错误参数error就必须对错误进行处理
do{ try }catch{ 当有错误抛出的时候就执行catch里面的代码 } //如果是强try(try!)的话有异常抛出的话直接崩溃,并不会跳转到catch里面去
15 CGRectOffset
的使用
```
//第一个参数:frame大小
//第二个参数:x方向偏移的大小
//第三个参数:y方法偏移的大小
CGRectOffset(frame,x,y)
```
16 按钮监听不能使用private
修饰
private
修饰,可以在一定程度上提高代码的可阅读性private
修饰,因为按钮的监听是由runLoop来调用执行的,而不是本类来调用的,所以当按钮的监听采用private
来修饰的时候程序会崩溃17 闭包回调中应该接收一个optional
类型的,不使用!
,!
是强制解包,当闭包回调中如果有一个参数为nil的时候使用!
强制解包就会造成程序崩溃
18 swift中的字典转模型
init(dict){
super.init()
setValuesForKeyWithDictionary(dict)
}
19 swift中可以通过点语法直接修改结构体里面的变量
btn.frame.origin.x = 0
20 swift中遵守协议的用法
extension 本类名:协议名
{
}
标签:
原文地址:http://www.cnblogs.com/develop-SZT/p/5558854.html