Swift2.0 基本语法

来源:互联网 发布:淘宝店应该怎么推广 编辑:程序博客网 时间:2024/06/10 16:34

Swift基本语法(强类型语言)


语句结束 —>;

不需要分号回车即可,多语句并列时,可使用

alloc init —> ()

alloc initWithXXX —> (XXX: )

类函数 —> .

可以省略self. 最好不要加闭包中需要self. 

枚举类型 —> 分开写.

NSLog打印 —> print 带换行 

selection —> “xxx”

字符串拼接 —> ...\(字符串)

方法:

func click(sender:UIButton){

        print("点我了---\(str)")

}


1.常量|变量:

let —> 常量尽量用let

var —> 变量必要修改时再用var

自动推导右侧类型任何时候都不会做隐式转换必须是相同类型进行计算类型不同需要强转

强转 —> 类型()

浮点类型默认 —> Double

整数类型默认 —> Int


*可选项 Optional一个变量可为本身类型也可为nil

eg. let x: Double = 20

      print(x + 1.5)

      let y: Int? // 可以是整数也可以是nil, 如果是变量默认是nil

      var z: Int? = 10

可选项不能直接计算—> 强行解包(unwrapping), 程序员承诺一定有值如果没有就崩

构造函数有? —> 不一定能创建出对象

  没有? —> 一定有值, 没有就崩

提示: 可选项注意思考为什么?


2.控制流:

if

if 变化:

-1. 没有(), 必须有{}

格式: if 条件 {}

-2. 没有非零即真只有truefalse

-3. 三目很常用


if let 用法: 分支内部处理

if let name = oName {

print("xxx" + name)

}

// 多值判断

if let name = oName, age = oAge {

print("xxx" + name + age)

}


guard let … else … 用法: 分支外部处理

与if let相反, 保证一定有值

guard let age = oAge else {

print("age为nil")

}


swith 变化:

-1.不需要break, 必须涵盖所有条件每个case至少包含一条语句无内容用break代替

-2.任意数据类型可判断

-3.case之间不会穿透多指用,分隔

-4.定义变量不用{}分隔作用域


3.字符串:

String 用法:

-1.拼接 —> \(变量名)

-2.String类型 —> 结构体量级更轻

-3.支持直接遍历

-4.字符串长度 —> strin.characters.count

-5.格式化 —> String(format: "%d", arguments:[数组])

      String(format: "%d", 参数,…)

-6.取子串: NSString

let str = "xxxnihao"

let s1 = (str as NSString).substringWithRange(NSMakeRange(n, n))

// 变化最频繁

let s2 = str.substringFromIndex("1234".endIndex) // 4个字符长开始取, 1234只为占位

// ihao

// 指定范围 ..<

// advancedBy 正数向右移动负数向左移动

let startIndex = str.startIndex.advancedBy(2)

let endIndex = str.endIndex.advancedBy(-2)

// 掐头去尾

let range = startIndex..<endIndex

let s3 = str.substringWithRange(range)

// xnih


4.循环:

for

for 变化:

-1.没有()


for in 变化:

-1.范围注意不要多加空格

for i in 0..<9 { // 0~8}

for i in 09 { // 0~9} // 0…9 == 0..<10


5.集合:

数组:

-1.[] 定义:

[String] [NSObject]

let array = ["xxx", "xxx"]

let array = ["xxx", "xxx", 29]

-2.可直接存基本数据类型

-3.结构体同样需要包装成 NSValue —> NSValue(CGPoint: CGpoint(x:10, y:29))

-4.可变 | 不可变: var | let

-5.指定类型

var array: [NSObject] = []

var array: [AnyObject] = [] // 范围更大没有任何父类

-6.遍历:

for s in array {

print(s)

}

-7.增删改查:

: array.append()

: array.removeFirst()

      array.removeLast()

      array.removeAll(keepCapacity: true) // 保持容量 

: array[index] = "xxx" // 下标获取元素


数组容量: array.capacity

分配空间: array = [String]()

-8.合并:

var array = []

let array2 = []

// array2 合并到array

array += array2

// 注意合并时数组类型必须保持一致


字典:

-1.定义: ["ddd": "xxx", "ggg": 19]

-2.类型: [String: NSObject] | 

 [String: AnyObject类型最多网络获取json有要求, key必须是String

-3.可变 | 不可变: var | let

可变如果key存在覆盖不存在新增

-4.遍历:

for (key, value) in dict {

print("k:\(key)——v:\(value)")

}

-5.增删改查:

: dict["nnn"] = "xxx"

-6.合并:

var dict = []

let dict2 = []

// dict2 合并到dict, 如果key存在覆盖不存在新增

for (key, value) in dict2 {

dict[key] = value

}


6.函数:

-1.格式: func 函数名(形参列表) -> 返回值类型 {}

func sum(x: Int, y: Int) -> Int {

return x+y

}

调用: sum(29, y: 39) // 默认第一个参数名可省略

-2.外部参数:

func sum(num1 x: Int, num2 y: Int) -> Int {

return x+y

}

调用: sum(num1: 29, num2: 39) // 方便调用者明确各参数的语义

-3.无返回值格式:

1>啥都不写

2> Void

3> ()

eg.

func demo1 {

print("")

}

func demo2 -> Void {

print("")

}

func demo3 -> () {

print("")

}


7.闭包:(类似block)

-1.定义所有代码都放在{参数 返回值 执行代码}

有参有返回:

格式: { (外部参数 形参列表) -> 返回值 in // 执行代码}

let sumFunc = {

(num1 x: Int, num2 y: Int) -> Int

in // 用于区分函数定义和执行代码

return x+y

}

// 外部参数很重要能够有智能提示

调用: sum(num1: 29, num2: 39)


无参无返回:

格式: () -> ()

let demo = { // 代码 }

调用: demo()


函数本身就可做参数传递

let sumFunc = sum

let r = sumFunc(10, y: 29) // r -> Int类型


func sum(num1 x: Int, num2 y: Int) -> Int {

return x+y

}


-2.应用场景异步加载网络数据完成回调

block对比:


-3.尾随闭包

闭包参数是函数的最后一个参数 -> 

函数的)结束可以前置到倒数第二个参数的末尾

最后一个,分隔符可省略

-4.简化闭包无参无返回可省略


8.解除循环引用(Block):









0 0
原创粉丝点击