Swift2.0学习一

前端之家收集整理的这篇文章主要介绍了Swift2.0学习一前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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: " -"))

猜你在找的Swift相关文章