zoukankan      html  css  js  c++  java
  • Swift语法基础: 20

    不知道不觉, 我们的Swift基础语法已经说了四分之一了, 下面让我们继续来看看:


    1.定义和调用函数

    在我们的Swift中, 也有定义函数和调用函数的方法, 和OC中的形式不太一样, 但本质都是相同的, 下面让我们来看看例子:

    func sayHello(personName: String) -> String {
        let greeting = "Hello, " + personName + "!"
        return greeting
    }
    
    var a = sayHello("xiaoming")
    
    println(a)
    // 打印出来的结果: Hello, xiaoming!

    PS: 在例子中的func关键字是声明函数必须得加上的, sayHello是函数名, (personName: String)说明函数里有一个参数名叫做personName, 它的类型是String类型, ->String的意思是指该函数返回的类型是一个String类型, 而声明的变量 a 就是用来调用sayHello该方法的, 而括号里所传入的就是该函数的参数内容.


    2.多输入形参

    在Swift中定义的函数同样是支持多形参输入, 比如:

    func halfOpenRangeLength(start: Int, end: Int) -> Int {
        return end - start
    }
    println(halfOpenRangeLength(1, 10))
    // 打印出来的结果: 9

    PS: 在这个函数里, 有两个形参, 分别都是Int类型.


    3.无形参数

    同样的, 和OC一样, Swift也允许函数没有形参, 比如:

    func sayHelloWorld() -> String {
        return "hello, world"
    }
    println(sayHelloWorld())
    // 打印出来的结果: hello, world

    4.无返回值函数

    在Swift中, 和OC一样, 同样允许函数没有返回值, 比如:

    func sayGoodbye(personName: String) {
        println("Goodbye, (personName)!")
    }
    sayGoodbye("Dave")
    // 打印出来的结果: Goodbye, Dave

    5.多返回值函数

    在Swift中, 我们可以声明多个类型的返回值, 元组就是一个最好的例子了, 比如:

    func count(string: String) -> (vowels: Int, consonants: Int, others: Int) {
        var vowels = 0, consonants = 0, others = 0
        for character in string {
        switch String(character).lowercaseString {
            case "a", "e", "i", "o", "u":
                ++vowels
            case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m","n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":
                ++consonants
            default:
                ++others
            }
        }
        return (vowels, consonants, others)
    }
    
    let total = count("some arbitrary string!")
    println("(total.vowels) vowels and (total.consonants) consonants, others is (total.others).")
    // 打印出来的结果: 6 vowels and 13 consonants, others is 3.

    6.函数形参名

    在OC或者Swift中, 我们都会给形参设定一个形参名, 比如:

    func someFunction(parameterName: Int) {
    }

    PS: 形参名为someFunction.


    7.外部形参名

    除了这种方法定义形参名之外, 还有另一种方式, 就是外部形参名:

    func someFunction(externalParameterName localParameterName: Int) {
        println(localParameterName)
    }
    
    var a: () = someFunction(externalParameterName: 10)
    // 打印出来的结果: 10

    PS: 这个就和我们在OC中定义的形参类似, 但书写格式必须得以空格隔开, “( 空格 )”.


    8.外部参数名称速记

    外部参数名称还有另一种快速记住的方法, 那就是在每个外部参数名称前加个 “( # )” 号, 比如:

    func containsCharacter(#string: String, #characterToFind: Character) -> Bool {
        for character in string {
            if character == characterToFind {
                return true
            }
        }
        return false
    }
    
    var a = containsCharacter(string: "abcdefg", characterToFind: "a")
    println(a)
    // 打印出来的结果: true

    这样子我们就不需要写两个形参名, 可以提高我们开发效率.


    9.默认形参值

    func join(string s1: String, toString s2: String, withJoiner joiner: String = " ") -> String {
        return s1 + joiner + s2
    }
    
    var a = join(string: "Hello", toString: "World", withJoiner: " - ")
    println(a)
    // 打印出来的结果: Hello - World

    PS: 这是我们自己设定的withJoiner函数内容, 所以使得两个字符串的拼接中间会有 “( -) ” 该符号, 但如果我们不设定的话, 就会默认我们声明时用的 “( 空格 )”.

    比如:

    func join(string s1: String, toString s2: String, withJoiner joiner: String = " ") -> String {
        return s1 + joiner + s2
    }
    
    var a = join(string: "Hello", toString: "World")
    println(a)
    // 打印出来的结果:Hello World

    10.有默认值的外部形参名

    还有一个例子, 就是有默认值的外部形参名, 下面是我们定义的:

    func join(s1: String, s2: String, joiner: String = " ") -> String {
        return s1 + joiner + s2
    }
    
    var a = join("Hello", "World", joiner: " - ")
    println(a)
    // 打印出来的结果: Hello - World

    下面是默认的:

    func join(s1: String, s2: String, joiner: String = " ") -> String {
        return s1 + joiner + s2
    }
    
    var a = join("Hello", "World")
    println(a)
    // 打印出来的结果: Hello World

    和我们前面讲解外部形参类似, 只是添加了一个默认返回值是 “( 空格 )”的参数.


    好了, 这次我们就讲到这里, 下次我们继续~~~

  • 相关阅读:
    关于课程设计、毕业设计的一些总结与思考
    分享一个Panda C-60 维修心得
    未能加载文件或程序集“SuperMap.Data.dll”
    VS2017环境下安装AO10.2的方法
    SQL Server连接错误1326
    VMWare虚拟机中CPU过高的问题
    Apktool编译找不到“keyboardNavigationCluster”
    Aspose.Cells设置单元格格式
    谷歌Chrome浏览器无法安装插件的解决方法
    Global Mapper如何加载在线地图
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4529369.html
Copyright © 2011-2022 走看看