在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
【基础】 Swift函数格式: 1.定义格式: func 函数名(参数名1:数据类型,... ,参数名n:数据类型) -> (返回值类型1,...,返回值类型n){ ///函数体内语句 } 2.调用格式: 函数名(形参列表) 函数名(形参列表). 返回值索引 例子: func greet(name: String , day: String) -> String{ return "Hello \(name), today is \(day)." } greet("Bob","Tuesday")
吐槽: 苹果终于把那让人恶心的函数格式改过来了,记得当初刚学obj-c的时候,那个叫难受! 不过为了保持“不落俗套”,返回值类型又被扔到最后了,苹果你在这些语法格式上要毛个性呀!难道不能跟java/C++/C#统一么? 好在调用时,回归自然了,当时看到那一个方括号套一个方括号就反胃。
3 .返回多值 从格式上可以看出,Swift和传统函数不同,允许一个函数返回多个值 返回的值可以用 函数名(形参列表). 返回值索引 来各自获取,索引从0开始,如: func getPerson()->(String,Int16,String) { return("张三",16,"男") } println(getPerson().0+"今年"+String(getPerson().1)+"岁,性别:"+getPerson().2);
4. Swift函数可以用...来获取不固定个数参数 func sumOf(numbers:Int...)->Int{ var sum=0 for number in numbers{ sum+=number } return sum } sumOf() 请注意,这个是可变参数个数,和数组参数不同,可以对比: func sumOf(numbers:Int[])->Int{ var sum=0 for number in numbers{ sum+=number } return sum } //sumOf() sumOf([42,597,12,55]) 第二段代码用的是数组,虽然数组中项个数不固定,但参数必须是一个数组
【高级】 5.函数重载 Swift中,函数名相同、参数不同就可以重载,返回值类型和个数不影响 但注意!函数名相同、参数相同、返回值个数或类型不同不算重载,是错误,因为系统调用函数时无法区分。
6.局部函数 Swift中,允许在函数中嵌套定义局部函数,局部函数只能使用在它所定义的函数中,不能在外部使用,如: func rf()->Int{ var y=10 func add(){ y+=5 } add() return y } rf() add() // 系统报错
7. 以函数作为函数的返回值类型 函数是first-class type(一流类型?暂时没找到这个概念),所以函数可以将其他函数作为它的返回值 例如: //创建以函数add作为返回值的函数makeInc func makeInc()->(Int->Int){ func add(number:Int)->Int{ return 1+number } return add } //inc获取到函数makeInc的值,所以inc就成了add var inc=makeInc() inc(7) 有函数指针,用这个到底有什么意义?才疏学浅,等待大牛解惑~ 8. 函数作为其它函数的参数 以函数作为参数,将别的函数逻辑带入到当前函数中 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,1,12] hasAnyMatches(numbers, lessThanTen) 感觉能用到的可能性不是很大
9. 临时/匿名 函数:{} closure 使用块{} 可以定义临时函数,其中要用到关键字“in”来分隔函数头和函数体 完整格式: {(形参列表)-> 返回值类型列表 in ///临时函数体语句 return 返回值 } 下面的代码用到了数组的map()方法,将原数组映射为新数组 在临时函数中,写入映射规则,偶数原样不变,奇数变为0 在swift中,将这种{}结构称为“closure” var numbers=[20,19,1,12] numbers.map({ (number:Int)->Int in if number%2==1{ return 0} else{ return number} }) //结果:[20,0,0,12] 如果在closure中,如果类型已知,还可以进一步简化写法: numbers.map({number in 3*number}) //数组中每个元素值乘三 而且closure还可以作为最后一个函数参数,比如: sort([1,5,3,12,2]) {$0>$1} 解释: 上面的sort函数用于排序,有两个重载,上面用的是第二个 T[] sort(array: T[], pred: (T, T) -> Bool) closure {$0>$1}就是参数(T,T)->Bool 由于google挂了(因为万恶的XXXXXXXX!! 此处省略一万字),百度搜不到,所以这里没法对这个函数 做进一步解释,咱还没申请苹果99$的账号,也下不到xcode 6的文档,以后再补上说明吧 看意思,这里的T还有点泛型的味道
|
请发表评论