技术控

    今日:2| 主题:49195
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] [iOS] Swift 中的 Functions

[复制链接]

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
LearniOS

  Swift

  Functions

  1、虽然(Example1)中的函数没有返回值类型,但是严格的讲,该方法(    greet(person:))还是返回了一个值,即使没有定义返回值。如果函数没有定义返回值的话,它默认会返回一个类型为Void的具体值。会返回一个空的元祖(    写做())。  
  Example1 :
  1. func greet(person: String) {
  2.     print("Hello, \(person)!")
  3. }
复制代码
2、返回值可以被忽略。
  返回值可以被忽略,但是一个声明了返回值的函数必须有返回值。如果你声明的函数有返回值,而你的函数体内并没有返回值的话,编译器会报错。
  3、    (Int, Int)?和    (Int?, Int?)是不同的。一个可选的元祖类型,并不是意味着它包含的每个值都是可选类型。  
  Example2 :
  1. func minMax(array: [Int]) -> (min: Int, max: Int)? {
  2.     if array.isEmpty { return nil }
  3.     var currentMin = array[0]
  4.     var currentMax = array[0]
  5.     for value in array[1..<array.count] {
  6.         if value < currentMin {
  7.             currentMin = value
  8.         } else if value > currentMax {
  9.             currentMax = value
  10.         }
  11.     }
  12.     return (currentMin, currentMax)
  13. }
复制代码
4、如果你不想每个参数都写一个参数标签,你可以使用'_'来代替参数标签(eg:Example3)。
  Example3 :
  1. func someFunction(_ firstParameterName : Int, secondParameterName: Int) {
  2.     // _代表第一个参数
  3. }
  4. someFunction(1, secondParameterName: 2)
复制代码
5、通过在参数类型后面给参数添加一个值,你可以定义任何参数的默认值。如果参数被设置默认值,在调用该方法的时候你可以忽略该参数(Example4)。
  Example4 :
  1. func someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) {
  2. }
  3. someFunction(parameterWithoutDefault: 3, parameterWithDefault: 6) // parameterWithDefault 为 6
  4. someFunction(parameterWithoutDefault: 4) // parameterWithDefault 为 12
复制代码
6、一个可变参数可以接受0个或者多个指定类型的参数。 你使用可变参数来指定在调用函数时,参数可以传递不同数量的输入值. 在参数类型后面添加三个点(...)来表明它为可变参数(Example5)。
  
       
  • 一个函数最多有一个可变参数。   
  • 函数参数默认为常量。  
  Example5 :
  1. func arithmeticMean(_ numbers: Double...) -> Double {
  2.     var total: Double = 0
  3.     for number in numbers {
  4.         total += number
  5.     }
  6.     return total / Double(numbers.count)
  7. }
  8. arithmeticMean(1, 2, 3, 4, 5)
  9. // return 3
  10. arithmeticMean(3, 8.25, 18.75)
  11. // returns 10.0
复制代码
7、输入输出参数不能有默认值,并且可变参数不能标记为inout。你只能将变量声明为in-out参数。
  8、In-out参数和函数的返回值是不一样的。下面的例子并没有定义返回值,但是它仍然能修改someInt和anotherInt的值。In-out可以影响函数体外的参数值(Example6)。
  Example6 :
  1. func swapTwoInts(_ a: inout Int, _ b: inout Int) {
  2.     let temporaryA = a
  3.     a = b
  4.     b = temporaryA
  5. }
  6. var someInt = 3
  7. var anotherInt = 107
  8. swapTwoInts(&someInt, &anotherInt)
  9. print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
  10. //someInt = 107 anotherInt = 3
复制代码
9、函数解读
  Example7 :
  1. func printHelloWorld() {
  2.     print("hello, world")
  3. }
复制代码
上面函数的类型为    () -> Void,或者是一个没有参数,返回值为Void的函数。  
  Example8 :
  1. func addTwoInts(_ a: Int, _ b: Int) -> Int {
  2.     return a + b
  3. }
  4. var mathFunction: (Int, Int) -> Int = addTwoInts
复制代码
定义一个名字为mathFunction的变量,它的类型为:有两个Int类型的参数,并且返回值为Int的函数。该变量指向addTwoInts函数。
  10 函数当参数
  Example9 :
  1. func printMathResult(_ mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) {
  2.     print("Result: \(mathFunction(a, b))")
  3. }
  4. printMathResult(addTwoInts, 3, 5)
复制代码
11、内嵌函数
  嵌套函数默认情况下从外部隐藏,但仍然可以由其封闭函数调用和使用。封闭函数还可以返回其一个嵌套函数,以允许嵌套函数在另一个作用域中使用(Example9)。
  Example10 :
  1. func chooseStepFunction(backward: Bool) -> (Int) -> Int {
  2.     func stepForward(input: Int) -> Int { return input + 1 }
  3.     func stepBackward(input: Int) -> Int { return input - 1 }
  4.     return backward ? stepBackward : stepForward
  5. }
  6. var currentValue = -4
  7. let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)
  8. // moveNearerToZero 现在等同于stepForward函数,因为(currentValue > 0)为false
  9. while currentValue != 0 {
  10.     print("\(currentValue)... ")
  11.     currentValue = moveNearerToZero(currentValue)
  12. }
  13. print("zero!")
复制代码
友荐云推荐




上一篇:[iOS] Swift 中的 Class 和 Structure
下一篇:找到MySQL服务器发生SWAP罪魁祸首
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表