swift学习记录(swift的类型推断)
2015-06-08 11:07
417 查看
今天听斯坦福大学Paul Hegarty 教授关于IOS开发的公开课,其中强调了swift的类型推断 让我明白了swift语法中一些奇怪的东西:
1、赋值中的类型推断:
let value = 1
这是有类型推断是很容易理解的。
2、闭包的类型推断:
func hasAnyMatches(list:Array<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,2,6]
hasAnyMatches(numbers,lessThanTen)
我们知道lessThanTen可以在调用hasAnyMatches时直接写成一个闭包,这样就不用单独申明函数。也就是写成hasAnyMatches(numbers,{
(number:Int)
-> Bool in return number < 10
})
但是考虑到swift是有良好的类型推断功能,所以实际上可以删除不必要的类型,写成
hasAnyMatches(numbers,{
number in return number < 10
})
因为swift可以推断出闭包的返回类型,所以其实不需要return
hasAnyMatches(numbers,{
number in number
< 10
})
同时,参数是可以不申明的,所以
hasAnyMatches(numbers,{
$0 < 10
})
如果闭包是函数的最后一个参数,还可以把闭包拿出来
hasAnyMatches(numbers){$0
< 10}
1、赋值中的类型推断:
let value = 1
这是有类型推断是很容易理解的。
2、闭包的类型推断:
func hasAnyMatches(list:Array<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,2,6]
hasAnyMatches(numbers,lessThanTen)
我们知道lessThanTen可以在调用hasAnyMatches时直接写成一个闭包,这样就不用单独申明函数。也就是写成hasAnyMatches(numbers,{
(number:Int)
-> Bool in return number < 10
})
但是考虑到swift是有良好的类型推断功能,所以实际上可以删除不必要的类型,写成
hasAnyMatches(numbers,{
number in return number < 10
})
因为swift可以推断出闭包的返回类型,所以其实不需要return
hasAnyMatches(numbers,{
number in number
< 10
})
同时,参数是可以不申明的,所以
hasAnyMatches(numbers,{
$0 < 10
})
如果闭包是函数的最后一个参数,还可以把闭包拿出来
hasAnyMatches(numbers){$0
< 10}
相关文章推荐
- swift菜鸟群 欢迎学Swfit 的新手 老手加入 102916734
- 在项目里交叉使用Swift和OC
- ios swift比较不错的三方库地址
- Swift学习笔记 -面向对象(2)
- Swift - Swift添加方法描述
- ios_swift开发资源整理
- Ceph vs Swift - 架构剖析
- Swift函数
- Swift编程语言学习3.1排列
- swift基础控件的创建
- Swift split
- Swift学习笔记五
- Swift中的ViewController
- Swift语法学习之 类和结构体
- Swift语法学习之 方法
- swift 弹出pickview实例
- 【swift】15-0605 属性
- Swift学习笔记四
- 【swift】15-0604 类和结构体
- swift container server 莫名stuck