swift干货Swift专题iOS Developer

Swift简介(二)

2015-12-03  本文已影响101人  StoneLeon

在学习Swift的过程中,加入与OC的对比,这样更好理解,记忆.

1.0 if和switch分支:

--if:

/*Swift中的if和OC中的if"几乎"一模一样

* Swift中的if可以省略后面的圆括号

* OC中的if如果后面只有一条语句, 那么大括号可以省略, 而Swift中不行

* OC中的条件表达式非0即真, 而Swift中不行

* Swift中提供了真正的Bool类型, true/false, 条件表达式的值必须是true/false

*/

let num = 10

if (num == 10)

{

print("number等于10")

}

if num == 10

{

print("number等于10")

}

/*:

Switch

* switch后面的圆括号可以省略

* 如果是在OC中每个case后面不写break, 导致穿透. 而在Swift中不会

* 如果是在OC中想在case后面定义变量, 必须加上{}说明作用域, 而在Swift中不用说明作用域

* 如果是在OC中default的位置可以随便写, 而在Swift中不允许

* 如果是在OC中default可以不用写, 而在Swift中大部分情况下是必须写的

*/

let value = 3

switch value

{

case 0:

print("0")

var i = 10

case 1:

print("1")

case 2:

print("2")

case 3:

print("3")

case 4:

print("4")

default:

print("other")

}

1.1 分支相关:

/*:

三目运算符

* 格式: 条件表达式 ? 取值1 : 取值2

* 注意: 运算符之间需要有空格

* 提醒: 在Swift开发中三目运算符用得非常多

*/

let num = 7

let res = (num == 10) ? 10 : 5

/*:

可选类型(Optional)

只要看到数据类型后面有 ? !

* 含义: 可以有值也可以没有值, 只有可选类型的变量才能赋值nil

* convenience init? 返回一个可选类型的值

* 注意: 如果输出可选类型的值, 会包装一个Optional

* 如果在变量的后面加上一个!, 代表告诉系统该变量一定有值

* !称之为强制解包

* 注意: 如果可选类型的变量中没有值, 而又进行了强制解包, 那么会引发一个运行时的错误

* 开发技巧: 作为初学者, 不要去纠结? ! ??这些符号, 初期利用Xcode开发工具提醒来解决这些问题, 后期再深入研究什么时候使用? 什么时候使用!

*/

let url = NSURL(string: "http://www.baidu.com")

print(url!)

let url2 = NSURL(string: "http://news.baidu.com")

//print(url2!)

if url != nil

{

print(url!)

}

/*

自动解包

* 如果数据类型后面写的是!, 那么在使用该变量时系统会自动给我们解包

*/

let url4: NSURL! = NSURL(string: "http://www.baidu.com")

print(url4)

// 注意点: 数据类型后面不要随意添加!, 因为如果没有值会报错

let url5: NSURL! = NSURL(string: "http://news.baidu.com")

//print(url5)

/*:

可选绑定

* 格式: if let 变量名称 = 可选类型变量 {}

* 优点: 只要能进入大括号, 那么可选类型变量就一定有值

*/

if let url3 = url

{

// 在if中不用对url3进行强制解包, 因为在赋值的过程中系统已经帮我们解包了

print(url3)

}

1.2 循环相关:

/*:

Swift中的循环和OC中的循环 "基本"一致

for

while

do while  -- > Swift是 repeat while

*/

//: 常规写法

// 其它特点和if一样

for var i = 0; i < 10; i++

{

print(i)

}

//: Swift中的写法

// 后面的 0..<10 称之为半壁区间

// 半闭区间特点: 包含头不包含尾

for i in 0..<10

{

print(i)

}

// 闭区间: 包含头包含尾

// 注意点: .../..< 中间不能有空格

for i in 0...10

{

print(i)

}

// while: Swift开发中很少使用while

var index = 0

while index < 10

{

print(index)

index++

}

// repeat while

var i = 0

repeat{

print(i)

i++

}while(i < 10)

1.3 数组相关:

/*:

数组

* 格式: []

* 注意点: let 不可变数组 var 可变数组

*/

let arr1 = ["10", "20", "30"]

// 特点: 自动将基本数据类型转换为对象类型

var arr2 = [10, "20", 99.9]

// 获取

print(arr2[1])

// 修改

arr2[2] = 100

arr2

// 追加

arr2.append(33)

// 删除, 数组的删除方法会将被删除的元素返回给我们

arr2.removeAtIndex(0)

arr2

// keepCapacity: 删除数组中的元素, 是否需要保持数组原有的容量, 如果传入false代表不保持容量

arr2.removeAll(keepCapacity: false)

arr2.capacity

// 注意点: 数组添加容量永远是在原有容量的基础上*2

arr2.append(1)

arr2.capacity

arr2.append(2)

arr2.capacity

arr2.append(3)

arr2.capacity

// 合并

var arr3 = [1, 3, 5]

var arr4 = [2, 4, 6]

arr3 += arr4

arr3

//var arr5 = ["8", "9"]

//arr3 += arr5

for item in arr3

{

print(item)

}

1.4 字典:

/*

字典

* OC @{key:value}

* Swift [key:value]

* 和数组一样, 如果用let修饰就是不可变字典, 如果用var修饰就是可变字典

*/

// 开发技巧: 在iOS开发中使用频率最高的就是 [String: AnyObject]

let dict1 = ["name": "stone", "age": 3]

var dict2:[String: AnyObject]

dict2 = ["name": "stone", "age": 3]

// 获取

// 注意点: 从字典中取出的值都是可选类型的值

// 因为通过一个key取值, 可能取得到, 也可能取不到, 所以返回一个可选类型的值

// 如果!写在[]后面, 代表取出来的值一定有值

// 如果!写在dict后面, 代表dict一定有值

print(dict2["name"]!)

// 更新

dict2["name"] = "stone"

dict2

// 添加

// 也就是说, 如果key存在就是更新, 如果key不存在就是添加

dict2["score"] = 99

dict2

// 遍历

for key in dict2.keys

{

print(dict2[key])

}

// 会将字典中的key赋值给()中的第一个变量

// 会将字典中的value赋值给()中的第二个变量

// 注意: k/v随便写

// ()括起来的东西我们称之为元祖, 元祖是Swift中新增的一种数据类型

for (xx, oo) in dict2

{

print(xx)

print(oo)

}

// 合并

var dict3:[String: AnyObject] = ["name": "stone", "age": 3]

var dict4:[String: AnyObject] = ["score": 99]

// 字典不能像数组一样通过+=来合并

//dict3 += dict4

for (k, v) in dict3

{

dict4[k] = v

}

dict4

1.5 字符串相关:

import UIKit

/*:

字符串

* OC: @""

* Swift: ""

* 特点:

1.OC中的字符串是一个对象, Swift中的字符串是一个结构体

2.Swift中的字符串的性能比OC中的高

3.虽然OC中的字符串是一个对象, 而Swift中的字符串是一个结构体, 但是在Swift开发中可以在这两个数据类型之间快速的进行转换

*/

var str = "stone"

for c in str.characters

{

print(c)

}

// 字符串的拼接

let name = "stone"

let gender = "man"

// 目标: name = stone, gender = man

//NSLog(@"name = %@, gender = %@", name, gender)

// 注意: Swift的print函数不支持%i/%@等占位符

//print("name = %@, gender = %@", name, gender)

// Swift中拼接内容使用 \(需要拼接的数据)

print("name = \(name), gender = \(gender)")

// 10.987654321  --> 10.98

let dValue = 10.987654321

let res = String(format: "%.2f", arguments: [dValue])

print(res)

// 15-09-07

let res2 = String(format: "%02d-%02d-%02d", arguments: [15, 9, 7])

print(res2)

// 字符串截取

// 在Swift开发中字符串截取是一件非常非常非常蛋疼的问题

// 建议: 在Swift开发中如果要截取字符串, 或者以前在OC中使用的方法在Swift字符串中没有, 建议先将Swift字符串转换为OC字符串之后再使用

let str2 = "stoneleon"

//let str3 = str2 as NSString

//let str3: NSString = str2

let str4 = (str2 as NSString).substringWithRange(NSMakeRange(0, 4))

print(str4)

let str5:NSString = "user/desktop/abc.txt"

str5.pathExtension

1.6 函数相关:

/*:

函数:

* 格式 func 函数名称(参数列表) -> 返回值类型 {}

*/

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

func say() -> Void

{

print("hello")

}

say()

// 如果没有返回值还可以简写

// Void == ()

func say2() -> ()

{

print("world")

}

say2()

// 如果没有返回值, 那么返回值类型可以省略

func say3()

{

print("stone")

}

say3()

// 有返回值没有参数的

// 注意点: 返回值类型必须和返回的值保持一致

func getMax() ->Int

{

return 998

}

print(getMax())

// 没有返回值有参数的

// - (void)sum:(int)a b:(int)b;

// [self sum:10 b: 20];

// 从Swift2.0开始, 会自动将第二个参数开始的参数名称作为方法的标签

func sum(a: Int, b: Int)

{

print("sum = \(a + b)")

}

sum(10, b: 20)

// 单独指定方法的标签(提高阅读性)

// 可以在内部参数的前面加上外部参数名称

// 内部参数: a/b , 给函数内部使用的

// 外部参数: x/y , 给调用者使用的

func sum2(x a: Int, y b: Int)

{

print("sum = \(a + b)")

}

sum2(x: 30, y: 30)

// Swift2.0之前

// 代表a/b既是内部参数也是外部参数

//func sum(#a: Int, #b: Int)

//{

//    print("sum = \(a + b)")

//}

//sum2(a: 30, b: 30)

// 默认值

// 如果指定了默认值, 那么调用的时候可以忽略, 如果忽略会使用默认值

// 在其它语言中其实早就有默认值的概念了, 在其它语言中的默认值只能写在形参列表的最后面

// 但是Swift中的默认值可以写在任意地方

func sum3(a: Int, b: Int = 110)

{

print("sum = \(a  + b)")

}

//sum3(50, b: 10)

sum3(50)

func sum4(a: Int = 88, b: Int = 100)

{

print("sum = \(a  + b)")

}

//sum4(b: 88)

sum4()

// 有返回值有参数的

func sum5(a: Int, b: Int) -> Int

{

return a + b

}

print(sum5(20, b: 20))

未完待续...

上一篇下一篇

猜你喜欢

热点阅读