半年多没更新了。。。更多的是在印象笔记里写的太乱了。。十一抽个时间整理一下。。。
最近开始学习Swift了,正好Swift也升级到3.0了
目前通过2个方面在并行的学习Swift,这两个都有在我的GitHub上更新进度( 算法[1],项目[2]),有兴趣的同学可以一起哈
- 语言基础方向 -> 主要通过看Apple的Swifit3.0官方文档 同时最近也在看算法,准备用Swift都过一遍之前的算法题目
-
app构建项目方向 -> 看的是Stanford上的2016年春的Swift教程,建议在iPhone的iTunes U 上阅读 ,上面有slides和assignment,并且观看有英文字幕。
这篇是苹果官方的Swift3.0 Guide Tour ,算是脱水翻译版吧,代码为主,我觉得代码更直观一点
#1.流程控制
if 基本操作和普通的一样 少了括号
var optionalString: String? = "Hello"
print(optionalString == nil)
print(optionalString)
var optionalName: String?
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
for ..< 操作符
迭代循环的对象可以infer出类型
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (kind, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
取消了for的三目运算符 而且类型也可以infer
这个相当于 i = 0 ; i < 4 ; i++ ,如果需要包含的话就是 0 ...4
var total = 0
for i in 0..
total += i
}
print(total)
switch
while / Repeat
类似于while 和 do while
var n = 2
while n < 100 {
n = n * 2
}
print(n)
var m = 2
repeat {
m = m * 2
} while m < 100 print(m) ``` #2. Functions和闭包的特点 可以不带参数名调用 ``` func greet(_ person: String, on day: String) -> String {
return "Hello \(person), today is \(day)."
}
greet("John", on:"Wednesday")
可以返回多个参数值 ,取值可以通过参数名和参数位置取到,避免了自定义类或者struct
func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
var min = scores[0]
var max = scores[0]
var sum = 0
for score in scores {
if score > max {
max = score
} else if score < min { min = score } sum += score } return (min, max, sum) } let statistics = calculateStatistics(scores: [5, 3, 100, 3, 9]) print(statistics.sum) print(statistics.2) print(statistics.min) ``` 不定参数 ``` func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf()
sumOf(numbers: 42, 597, 12)
sumOf(numbers: 54,12,89,67)
多参数返回
func info(numbers: Int...)->( avarg:Int , sum:Int){
var sum = 0
for num in numbers {
sum += num
}
return (avarg: sum / numbers.count , sum: sum)
}
info(numbers: 54,12,89,67)
函数作为返回值
func addMore() -> ((Int)->Int){
func addOne(number: Int) -> Int{
return 1 + number
}
return addOne
}
var addMoreTest = addMore()
addMoreTest(6)
函数作为参数
PS:这里如果函数作为参数,并且改函数是空返回 的 写法应该是这样 :(Int) -> () 代表空返回 ,这里查了半天没查到资料,最后在错误提示时发现该这么写
func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10 } var numbers = [20, 19, 7, 12] hasAnyMatches(list: numbers, condition: lessThanTen) ``` Functions函数其实是一种特殊的闭包(Blocks of Code) 代码被({})包围就代表是闭包 下面是一个对array的元素转变的例子 ``` numbers.map({ (number: Int) -> Int in
let result = 3 * number
return result
})
闭包的参数类型可以简写 可以省略 因为编译器会知道你的参数类型
let mappedNumbers = numbers.map({ number in 3 * number })
print(mappedNumbers)
进一步可以省略到参数的定义 ,因为有几个默认输入参数 $0 $1 $2
let mapNumbers = numbers.map({ 3 * $0 })
print(mapNumbers)
下周继续,么么哒~