swift基本语法

1.常量和变量

定义一个常量:let 常量初始化赋值后 不能再次赋值

定义一个变量:var 赋值后 可以在此修改 后面一定要修改 否则选择let

2.Swift有数据类型推导 根据后面的值直接推出来的类型(option加鼠标左键4

3.显示指定类型 let cDouble 20.5

4.swift中没有隐式类型转换

类型不同 不能参与运算

5.let&var 选择

建议先使用let 在哪需要修改 再改成var

6.optional可选类型定义的常量或者变量可能有值 可能没有值(空,nil

1)定义的常量或者变量不能 直接参与计算

格式:可选类型- 类型后面加上

egvar aInt

定义的可选类型的变量默认值是nil

2‘ Optional ’表明 定义的变量或者常量是一个可选类型

‘ unwrapped ’ 表明可选类型没有进行解包

3let result a !+ b

对可选类型的变量或者常量进行强制解包(告诉系统这个值一定存在 你去用吧 如果这个值不存在(unexpectedly found nil while unwrapping an Optional value 对一个可选值为nil 强制解包 崩溃)

swift里面操作符空格要匹配

4??运算符

let result a ?? 0)+ b

使用 空合并运算符 ‘ ?? ‘ 判断前面的可选类型的变量或者常量是否有值 如果有值 直接使用 a参与计算 如果anil 使用??后面的值参与计算

7.if控制流

1if num > 5

()可以省略

swift 里面 只有一行代码 也不能省略{}swift里面 没有0即真的概念 条件语句的值 只能有true false 需要一个bool类型的值

2 可选类型的判断

unexpectedly found nil while unwrapping an Optional value

-对一个可选类型的值为nil 强制解包 报错

3if let 判断

它的意思是 判断可选类型的变量或者常量(URL)是否有值 有值 就使用前面定义的常量或者变量去记录这个值 如果这个可选类型的变量或者常量为nil 就不执行 if let语句

if let u url

//再次就可以使用u 而且这个u是一定存在的

let request NSURLRequestURLu


4)多个可选类型的判断

let nameString ?=张三

let age Int 20

//也可以使用var进行判断

if let n name,(vara age

print()

5guard let判断 if let相反的语法

//在循环里面可以使用break continue,不在循环里面使用return

//guard let 判断可选类型的常量或者变量是否有值 如果有值 则赋值给定义的常量或者变量 否则没有值 执行else语句里面的

guard let u url else

6)可选类型条件的判断

if let …. where….

where子句没有智能提示,子句可以使用&&

8.switch判断

swift 可以判断任意类型 可以省略break 可以省略大括号 case后必须有可执行语句

OC 只能判断整型

9.for循环

for while do whilefor in

0..<3 意思是 区间-[03

0…3 意思是闭区间 -[03

10.字符串的定义

1)定义:swift string这个类型 是一个结构体它的量级轻 速度是比NSString要快 它可以跟NSString无缝转换 支持字符串的遍历

OC NSString 它是一个对象 不支持字符串的遍历

2)字符串的拼接

使用可以拼接字符串

3‘ \()可以拼接字符串

可以不用强制类型转换

4)字符串长度

//统计字符串字符的个数

characters.count

//统计字节数

一个汉字在UTF8编码格式下占用3个字节

5)字符串的格式化

6)字符串的截取

11.集合

1)数组

定义数组:let 不可变数组 var 对应的可变数组

let array 1234

let array1 张三李四

var array2:[string string]()

//添加元素

array2.append苹果

//数组的遍历

for

for value in array

for (index,value) in array.enumerate

//数组的合并

两数组直接相加

类型不匹配 不能直接合并

//数组删除 remove

//数组的容量 capacity

容量是成倍扩展的 2的倍数

2)字典

字典的定义 string NSObject]这种字典类型是最常用 字典是无序的 数组是有序的

let定义的字典是不可变的 var 是可变的

//合并字典

不同类型的字典不能合并

//字典的删除remove 或者 dict“age”]= nil

//添加 如果key不存在就是添加操作

//修改 如果key存在就是修改操作

12.函数

1//无参数 无返回值

func demo1()

//swift2.0里面函数的第一个参数默认省略

//有两个参数 无返回值

func demo2aIntbInt

//有两个参数 无返回值的函数 num1 num2是外部参数 (是给调用方解释参数是什么意思 参数是干嘛的)

func demo3num1 a Intnum2 bInt){}

//有参数有返回值的函数

func sumaIntbInt->Int { return a + b }

2)函数格式

func 函数名(参数名:参数类型->返回值类型{}

3)没有返回值的三种类型

<1>func demo(num1 a:Int,num2 b:Int){}

<2>func demo(num1 a:Int,num2 b:Int)->Void{}

<3>func demo(num1 a:Int,num2 b:Int)->( ){}

4swift中可以使用函数的嵌套

13.闭包

1)和OC中的block是非常类似的 是一个预先定义好的代码 可以作为函数的参数传递 也可以作为函数的返回值 在需要的时候调用 在使用self的时候需要注意循环引用

2)闭包定义格式

闭包名 (参数名 :参数类型,…->返回值类型 in 执行代码

3)没有返回值的闭包可以直接去掉‘ ->( ) ’

4)定义一个没有参数 没有返回值的闭包可以直接去掉()->() ()->Void

5)???尾随闭包

//如果闭包作为函数的最后一个参数的话 则小括号()在闭包前面(小括号()提前关闭

//如果闭包没有参数和返回值 可以省略()->Void in’

14.OC block循环引用

//加载网络数据的方法

//模拟耗时操作 获取网络数据

15.解决block循环引用

//使用__weak 解决block的循环引用

//对象销毁 weakSelf指向的地址为nil

__weak typeofselfweakSelf self

//使用__unsafe_unretained解决block的循环引用

//对象销毁 weakSelf指向地址不变 地址对应对象已经销毁了 崩溃了报野指针

__unsafe_unretained typeofselfweakSelf self

相关文章

Swift 正式开源!Swift 团队很高兴宣布 Swift 开始开源新篇章。自从苹果发布 Swfit 编程语言,就成为了...
快,快,快!动动您的小手,分享给更多朋友! 苹果去年推出了全新的编程语言Swift,试图让iOS开发更简单...
开发者(KaiFaX) 面向开发者、程序员的专业平台! 和今年年初承诺的一样,苹果贴出了Swift语言的源码,...
本文由@Chun发表于Chun Tips :http://chun.tips/blog/2014/12/11/shi-yong-swift-gou-jian-zi-ding-yi...
本文由CocoaChina译者leon(社区ID)翻译 原文:THE RIGHT WAY TO WRITE A SINGLETON 在之前的帖子里聊过...
本文由CocoaChina译者leon(社区ID)翻译 原文:THE RIGHT WAY TO WRITE A SINGLETON 在之前的帖子里聊过...