加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift2.0语言教程之函数的返回值与函数类型

发布时间:2020-12-14 02:00:46 所属栏目:百科 来源:网络整理
导读:Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中 函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数。以下将会对这两种函数类型进行讲解。 Swift2.0中 具有一个返回值的函数 开发者希望在函数中返回某一数据类型的值,必须要

Swift2.0语言教程之函数的返回值与函数类型

Swift2.0中函数的返回值

根据是否具有返回值,函数可以分为无返回值函数和有返回值函数。以下将会对这两种函数类型进行讲解。

Swift2.0中具有一个返回值的函数

开发者希望在函数中返回某一数据类型的值,必须要在函数声明定义时为函数设定一个返回的数据类型,并使用return语句进行返回。其中,return语句的一般表示形式如下:

  • return表达式

其中,表达式可以是符合Swift标准的任意表达式。而具有返回值的函数声明定义形式如下:

    func函数名(参数列表)->返回值类型{

  • 语句

  • return表达式

  • }

其中,返回的表达式类型必须和函数的返回值类型一致。

【示例7-13】以下代码计算某一数值范围的长度,并返回输出。代码如下:

  • import Foundation

  • func range(start:Int,end:Int)->Int{

  • return end-start

  • }

  • let a=range(0,end: 10)

  • print(a)

在代码中,指定函数的返回值类型为Int,而return表达式为end-start。运行结果如下所示:

  • 10

Swift2.0中具有多个返回值的函数

Swift中,函数不仅可以返回一个返回值,还可以返回多个,这时就需要使用到元组类型。其语法形式如下:

    func count(参数列表) ->(返回值1:数据类型,返回值2:数据类型3:数据类型){

  • ……

  • return (返回值1,sans-serif; line-height:1.5">2,sans-serif; line-height:1.5">3,sans-serif; line-height:1.5">)

  • }

【示例7-14下面就获取在一个字符串中得元音、辅音以及其它的个数。代码如下:

  • import Foundation

  • func count(string: String) ->(vowels: Int,consonants: Int,others: Int){

  • var vowels = 0,consonants = 0,others = 0

  • for character in string.characters{

  • 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 str="Hello Swift!"

  • let number=count(str)

  • print("(number.vowels)元音n(number.consonants)辅音n(number.others)其它")

运行结果如下所示:

    3元音

  • 7辅音

  • 2其它

在具有多个返回值的函数需要注意以下2点:

1.返回值个数一致

->后面的返回值类型的个数要和return中的返回值个数一致,否则程序就会出现错误。如以下的代码,将示例7-14中的代码做了修改:

  • func count(string: String) -> (vowels: Int,others: Int) {

  • var vowels = 0,others = 0

  • return (vowels,consonants)

  • }

在此代码中可以知道,->后面的返回值类型有3个,但是return中得返回值有2个,它们的个数不一样,导致程序出现以下的错误:

Tuple types '(@lvalue Int,@lvalue Int)' and '(vowels: Int,others: Int)' have a different number of elements (2 vs. 3)

2.返回值顺序

->后面的返回值类型要和return中的返回值类型的顺序一致,否则程序就会出现错误。如以下的代码,将示例7-14中的代码做了修改:

    在此代码中,->后面的返回值为(vowels: Int,others: Int)return中的返回值为(vowels,consonants)由于它们的数据类型相同都是整型,所以在改变它们的位置后,程序不会出现错误。运行结构如下:

      3元音

    • 2辅音

    • 7其它

    Swift2.0中无返回值

    函数除了有有返回值类型外,还有没有返回值的类型。在第7.27.37.4节中所讲的都是没有返回值的函数类型。没有返回值的类型不需要定义返回值类型,并且也不需要出现return语句。如果出现return语句,反而会造成程序错误。例如以下的代码,它的功能是输出某一数字。

    • import Foundation

    • func printaa(a:Int){

    • return a

    • }

    • let num=9

    • let number=printaa(num)

    • print(number)

    在此函数中,它是没有返回值的,但是在函数中又使用了renturn语句返回了a的值,所以导致程序出现了以下的错误信息:

    • 'Int' is not convertible to '()'

    Swift2.0中函数类型

    Swift中,每一个函数都是一个特定的类型,这种类型被称为函数类型。它由参数类型和返回值类型构成。例如以下代码就是一个具有参数类型和返回值类型的函数:

    • func add(a: Int,b: Int) -> Int {

    • return a + b

    • }

    在该代码中,定义了一个实现加法运算的数学函数add。此函数接受了两个Int整型的参数,执行相应的数学运算后,返回一个Int整型值作为结果。这个函数的类型就是(Int,Int)->Int,程序员可以理解为函数类型有两个Int整型参数,并返回一个Int整型值。在Swift除了有具有参数列表和返回值类型的函数外,还有不带参数和返回值类型的函数,如以下代码是一个不带参数和返回值的函数:

    • func printHelloWorld(){

    • print("Hello,World")

    • }

    函数printHelloWorld()的类型是()->()。由于函数没有参数,返回void,所以该类型在Swift中相当于一个空元组,也可以简化为()

    Swift2.0中使用函数类型

    作为一种类型,程序员可以像任何其他类型一样使用函数类型。基本语法如下:

      let/var常量名/变量名:函数类型=函数名

    • 或者

    • =函数名

    【示例7-15】以下将使用一个mathFunction变量引用函数add。代码如下:

    • import Foundation

    • func add(a: Int,b: Int) -> Int {

    • return a + b

    • }

    • var mathFunction: (Int,Int) -> Int = add

    • print(mathFunction(2,8))

    在代码中定义了一个mathFunction变量,并将该变量的类型设定为函数类型。它接受了两个Int整型值,并返回了一个Int整型值。使用这个新的变量mathFunction来引用add函数的功能。运行结果如下所示:

      10

    由于Swift具有自动推断类型的能力,所以可以在声明变量后直接赋值,不需要单个为变量去声明类型,所以以上的为变量赋值的代码可以改写为:

    • var mathFunction = add

    如果不同函数具有相同的函数类型,这时把它们赋值给同一个变量。例如,在以上的代码中在添加一个函数:

    • func multiply(a:Int,b:Int)->Int{

    • return a*b

    • }

    由于mathFunction变量和multiply的类型匹配,所以可以直接赋值,并输出,代码如下:

      mathFunction=multiply

    • print(mathFunction(3,sans-serif; font-size:14px"> 代码如下所示:

        10

      • 24

      Swift2.0中使用函数类型作为参数类型

      开发者可以使用函数类型作为另一个函数的参数类型。例如以下代码,它的功能是让个数进行相加或者相乘,然后输出。代码如下:

      • import Foundation

      • //两数相加

      • func add(a: Int,b: Int) -> Int {

      • return a + b

      • }

      • //两数相乘

      • func multiply(a:Int,b:Int)->Int{

      • return a*b

      • }

      • //输出结果

      • func printresult(fun:(Int,Int)->Int,a:Int,b:Int){

      • print(fun(a,b))

      • }

      • printresult(add,a: 3,b: 2)

      • printresult(multiply,b: 2)

      在此代码中定义了三个函数。第三个函数printresult中,有三个参数:第一个参数为fun,类型为(Int,Int)->Int,开发者可以传入任何这种类型的函数;第二个参数和第三个参数分别为ab,它们的类型都是Int型,这两个值是函数的输入值。当第一次调用printresult函数时,它传入了add函数和35两个整数。这时,它又会调用函数add,将35作为函数add的输入值,并输出结果。第二此调用也类似,printresult会调用multiply函数。最后的运行结果如下所示:

        5

      • 6

      Swift2.0中使用函数类型作为返回值类型

      函数类型不仅可以被用作参数外,还可以被用作返回值类型。此时需要在->后面写入一个完整的函数类型,其语法形式如下:

        ) ->函数类型

      • }

      【示例7-16】以下代码输出通过给定的值,出现一系列的值;如果给定的值大于0输出从这个数开始到0之间的数;如果是负数,一直输出比这个是小1的数。代码如下:

        //返回一个比输入值大1得值

      • func stepForward(input: Int) -> Int {

      • return input + 1

      • }

      • //返回一个比输入值小1得值

      • func stepBackward(input: Int) -> Int {

      • return input - 1

      • }

      • //选择返回哪个函数

      • func chooseStepFunction(backwards: Bool) ->(Int) -> Int{

      • return backwards ? stepBackward : stepForward

      • }

      • var currentValue = 5

      • let moveNearerToZero = chooseStepFunction(currentValue>0)

      • while currentValue != 0 {

      • print("(currentValue)... ")

      • currentValue = moveNearerToZero(currentValue)

      • }

      在此代码中定义了3个函数。第三个函数chooseStepFunction的返回值类型是(Int)->Int。运行结果如下所示:

        5...

      • 4...

      • 3...

      • 2...

      • 1...

      • Swift2.0中的标准函数

      函数除了可以根据参数列表的有无分为无参函数和有参函数,还可以从定义角度分为用户自定义函数和标准函数两种。以上的示例都是用户自定函数。Swift提供了74个标准函数,这些函数都可以直接去使用,不需要进行定义。本节将针对常用的标准函数进行详细的讲解。

      Swift2.0中绝对值函数abs()

      abs()函数的功能是求数值的绝对值。其语法形式如下:

        abs(数值)

      函数的返回值是一个零或者正数。

      【示例7-17】以下将使用abs()函数获取-10100-1.2331.233的绝对值。代码如下:

        //求整数的绝对值

      • let value1=abs(-10)

      • let value2=abs(10)

      • let value3=abs(0)

      • //求浮点数的绝对值

      • let value4=abs(-1.233)

      • let value5=abs(1.233)

      • print("value1=(value1)")

      • print("value2=(value2)")

      • print("value3=(value3)")

      • print("value4=(value4)")

      • print("value5=(value5)")

      在此代码中,正数的绝对值是它本身;负数的绝对值为正数;0的绝对值还为0。运行结果如下:

      • value1=10

      • value2=10

      • value3=0

      • value4=1.233

      • value5=1.233

      注意:abs()中的参数必须是数值,不可以是数值以外的东西,如字符、字符串等。如以下的代码,将获取字符串"aaa"的绝对值。代码如下:

      • import Foundation

      • let value1=abs("aaa")

      • print("value1=(value1)")

      由于abs()的参数为字符串导致程序出现了以下错误:

      • Cannot find an overload for 'abs' that accepts an argument list of type '(String)'

      Swift2.0中最大值函数max()/最小值min()

      在编程中,经常需要计算几个参数的最大值或者最小值,此时可以使用标准函数中的max()min()函数实现。以下是对这两个函数的详细讲解。

      1.获取最大值

      max()函数可以获取几个参数的最大值。其语法形式如下:

        max(参数参数 其中,参数可以是数值,也可以是字符串或字符。

        【示例7-18】以下将使用max()函数,依次获取1.910的最大值,13.82088.88的最大值以及字符串"Hello""Swift""Zone"的最大值。代码如下:

          let maxValue1=max(1.9,10)

        • let maxValue2=max(13.8,20,88.88)

        • let maxValue3=max("Hello","Swift","Zone")

        • print("maxValue1=(maxValue1)")

        • print("maxValue2=(maxValue2)")

        • print("maxValue3=(maxValue3)")

        在对字符串进行比较时,是对字符串中的字符进行比较。首先会判断3个字符的首字符哪个大。如果找到最大的字符,就以此字符开头的字符串为最大值;如果判断的3个首字符相同,那么在进行第二个字符的比较,以此类推。运行结果如下:

          maxValue1=10.0

        • maxValue2=88.88

        • maxValue3=Zone

        2.获取最小值

        min()函数可以获取几个参数的最小值。其语法形式如下:

          min(参数 其中,参数同样可以是数值、字符串或字符。

          【示例7-19】以下将使用min()函数,获取1.910的最小值,获取13.82088.88的最小值,字符串"Swift""Hello""iOS"的最小值。代码如下:

            let minValue1=min(1.9,sans-serif; line-height:1.5">let minValue2=min(13.8,sans-serif; line-height:1.5">let minValue3=min("Swift","Hello","iOS")

          • print("minValue1=(minValue1)")

          • print("minValue2=(minValue2)")

          • print("minValue3=(minValue3)")

          运行结果如下:

            minValue1=1.9

          • minValue2=13.8

          • minValue3=Hello

          注意:在使用max()min()时如果是数值,比较的参数都是数值。如果是字符或者字符串,比较的参数也是字符或者字符串。不可以在一个函数中同时比较数值和字符串、字符。以下的代码将比较1.910和字符串"Hello"的最小值。代码如下:

            let minValue=min(1.9,10,"Hello")

          • println("minValue=(minValue)")

          在此代码中,由于min()函数对数值和字符串进行比较,导致程序出现了以下的错误:

          • Cannot find an overload for 'min' that accepts an argument list of type '(Double,Int,String)'

          Swift2.0中序列的最大值函数maxElement()/最小值函数minElement()

          在一个序列中,往往需要获取元素的最大值或者最小值。此时可以使用maxElement()minElement()函数。以下是对这两个函数的详细讲解。

          1.序列的最大值

          maxElement()函数获取一个序列中最大值的元素。其语法形式如下:

          • 序列.maxElement()

          其中,序列可以是数值,也可以是一个范围。

          【示例7-20】下面使用maxElement()函数获取序列sequence1sequence2和范围1...100中最大值的元素。代码如下:

          • import Foundation

          • let sequence1=[9,8,2,3]

          • let sequence2=["Ad","Ab","Ac"]

          • let maxValue1=sequence1.maxElement()!

          • print("maxValue1=(maxValue1)")

          • let maxValue2=(1...100).maxElement()!

          • print("maxValue2=(maxValue2)")

          • let maxValue3=sequence2.maxElement()!

          • print("maxValue3=(maxValue3)")

          其中,字符串构成的序列sequence2的判断方式与函数max()相同,都是依次比较字符串的字母大小。运行结果如下:

            maxValue1=9

          • maxValue2=100

          • maxValue3=Ad

          2.序列的最小值

          minElement()函数可以获取一个序列中最小值的元素。其语法形式如下:

          序列.minElement()

          【示例7-21】以下将使用minElement()函数获取序列sequence1sequence2和范围1...100中最小值的元素。代码如下:

            let minValue1=sequence1.minElement()!

          • print("minValue1=(minValue1)")

          • let minValue2=(1...100).minElement()!

          • print("minValue2=(minValue2)")

          • let minValue3=sequence2.minElement()!

          • print("minValue3=(minValue3)")

          minValue1=2

        • minValue2=1

        • minValue3=Ab

        Swift2.0中判断序列是否包含指定元素函数contains()

        contains()函数可以判断一个序列中是否包含指定的元素。其语法形式如下:

          .contains(元素 其中,函数的返回值类型为布尔类型。当返回true时,表示表达序列中包含指定的元素;当返回false时,表示不包含。

          【示例7-22】以下代码使用contains()函数函数判断序列languages中是否包含元素"Swift""Java"。代码如下:

          • import Foundation

          • var languages = ["Swift","Objective-C","C"]

          • //判断在languages数组中是否包含"Swift"字符串

          • iflanguages.contains("Swift") == true{

          • print("languages序列中包含元素“Swift")

          • }else{

          • print("languages序列中不包含元素“")

          • }

          • "Java"字符串

          • iflanguages.contains("Java") == true{

          • Java")

          • }

          在此代码languages"Swift""Objective-C""C"这三个元素,但是没有"Java"元素。运行结果如下:

            languages序列中包含元素“Swift”

          • languages序列中不包含元素“Java”

          在比较的时候,会区分字母的大小写。所以,不同大小写的字符串是不同的。

          Swift2.0序列排序函数sortInPlace()

          在编程中,经常需要对序列中元素的进行排序。此时可以使用Swift中的sortInPlace()函数来实现。其语法形式如下:

            .sortInPlace()

          其中,序列是指数组。

          【示例7-23】以下将使用sort()函数对languagesvalue数组进行排序。代码如下:

            print("排序前:languages=(languages)")

          • languages.sortInPlace()

          • print("排序后:languages=(languages)")

        • 排序前:languages=[Swift,Objective-C,C]

        • 排序后:languages=[C,Swift]

        Swift2.0序列倒序函数reverse()

        reverse()函数可以将序列中元素的倒序排列。其语法形式如下:

          .reverse()

        【示例7-24】以下将使用reverse函数对序列languagesvalue进行倒序排列。代码如下:

        • print("languages=(languages)")

        • print("倒序输出:")

        • for i in Array(languages.reverse()){

        • print(i)

        • }

        • var value = [1,4,10]

        • print("value=(value)")

        • ")

        • for i in Array(value.reverse()){

        • print(i)

        • }

      • languages=[Swift,C]

      倒序输出:

        C

      • Objective-C

      • Swift

      • value=[1,10]

      4

    • 8

    • 1

    本文选自:Swift2.0语言快速入门v3.0大学霸内部资料,转载请注明出处,尊重技术尊重IT人!

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读