Swift2.0学习一
基本类型
整型
最大值最小值
Int.max
9223372036854775807
Int.min
-9223372036854775808
UInt
表示无符号整型
使用下划线对很多的数进行分割,以方便阅读let bigNum = 100_0000
类型转换
不同类型运算,需要转换
let x: UInt16 = 100 let y: UInt8 = 20 let m = x + UInt16(y) let n = UInt8(x) + y
元祖
将多个不同的值集合成一个数据
- 可以有任意多个值
- 不同的值可以是不同类型
如下
let point3 = (x: 3,y: 2) point3.x let point4: (x: Int,y: Int) = (10,5) point4.x
如果对元祖的某个分量不感兴趣,可以使用下划线_
来代替
let loginResult = (true,"data") let (isLoginSuccess,_) = loginResult
print
print可以设置分隔符和结束符
let x = 1,y = 2,z = 3 print(x,y,z,separator: "---") print(x,separator: "+++",terminator: ":)")
运算符
区间运算符
闭区间运算符[a,b] a...b
前闭后开区间运算符[a,b) a..<b
控制流
循环结构
for-in
使用下划线忽略参数
for _ in 1...power { result *= base }
C风格的循环
var index = -99 var step = 1 for ; index <= 99; index += step { index * index step *= 2 }
swift2.2
开始准备取消掉C风格的for循环,那么如何写一个可变步长的for循环呢?
for i in 10.stride (through: 0,by: -1) { print("\(i)") }
0.stride (through: 0,by: -1)
,表示从10到0(through),每次递减1。其他改变步长的逻辑依此类推。
switch
swift的switch
不需要break,基本数据类型也可以switch case语句来判断
例如对元祖
let vector = (1,1) switch vector { case(0,0): print("It,s origin!") case(1,0): print("1 0") case(1,1): print("1 1") default: print("default") }
fallthrough
并不会判断下一个case(或者default)是否符合switch的条件,而是直接跳到下一个case(或者default)
- 我们不能使用
fallthrough
跳到一个有逻辑判断(where)语句的case中 - 请不要使用switch和
fallthrough
组合复杂的判断逻辑,来代替if else。fallthrough应该用于从一般到特殊的逐层判定。
如下
let point = (0,0) switch point { case (0,0): print("It's origin!") fallthrough case (_,0): print("It's on the x-axis") case(0,_): print("It's on the y-axis") default: print("It's just an ordinary point.") }
控制转移
如下,找到第一个解就退出循环
findAnswer:for m in 1...300 { for n in 1...300 { if m*m*m*m - n*n == 15*m*n { print(m,n) break findAnswer } } }
where 与模式匹配
if case的用法
let age = 19 if case 10...19 = age { print("You're a teenager") }
其后还可以跟where
if case 10...19 = age where age >= 18 { print("You're a teenager") }
同样可以在for循环中使用where语句,如下
for i in 1...100 { if i%3 == 0 { print(i) } } for case let i in 1...100 where i % 3 == 0 { print(i) }
guard
如下所示的代码,if else 很复杂
func buy(money: Int,price: Int,capacity: Int,volume: Int) { if money >= price { if capacity > volume { print("I can buy it!") print("\(money-price) Yuan left.") print("\(capacity-volume) cubic meters left") }else{ print("Not enough capacity") } }else{ print("Not enough money") } }
使用guard
来处理,首先进行边界的检验,可读性更强
func buy2(money: Int,volume: Int) { guard money >= price else { print("Not enough money") return } guard capacity >= volume else { print("Not enough capacity") return } print("I can buy it!") print("\(money-price) Yuan left.") print("\(capacity-volume) cubic meters left") }
字符串
遍历字符串中所有的字符
var str = "Hello,swift" for c in str.characters { print(c) }
获取字符串字符的长度
var chineseLetters = "权力的游戏" chineseLetters.characters.count
String.Index和Range
let startIndex = str.startIndex
类型是Index
获取str的第五个字符
var str = "Hello,swift" let startIndex = str.startIndex str[startIndex.advancedBy(5)]
predecessor()
获取当前索引的前一个索引的位置
let spaceIndex = startIndex.advancedBy(6) str[spaceIndex.predecessor()]
successor()
获取当前索引的后一个索引的位置
str[spaceIndex.successor()]
endIndex
表示字符串结束位置的索引,需注意的是,endIndex
并不是最后一个字符位置的索引,而是最后一个字符位置的后一个位置。是一个前闭后开的区间 [startIndex,endIndex)
使用Index组成区间
let range = startIndex..<spaceIndex.predecessor()
一些用法
str.replaceRange(range,with: "Hi") str.appendContentsOf("!!!") str.insert("?",atIndex: str.endIndex)
as 和 NSString
NSString
转换为String
let s2: String = NSString(format: "one third is %.2f",1.0/3.0) as String
NSString
去掉首尾的空格和-
let s6 = " ---- Hello ------- " as NSString s6.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: " -"))