1. 程式人生 > >7 函式——《Swift3.0從入門到出家

7 函式——《Swift3.0從入門到出家

6 函式

函式就是對某個功能的封裝,一個swift程式可能由多個函式組成

swift中定義函式的格式:

func 函式名稱(引數列表) —>函式返回值型別{

函式體

return 

}

函式定義要素:

func 是定義函式的關鍵字

函式名名字:為了增強可讀性,函式的名稱只能用字母字元來命名,函式名稱以駝峰式命名法來命名

引數列表:可以帶多個引數,也可以沒有引數

如果帶有多個引數,格式為:引數名稱:型別標註,引數名稱:型別標註…

如果函式帶有多個引數,呼叫函式的時候,向函式傳遞的資料,型別必須要和定義引數的型別完全對應

函式返回值型別:只要是Swift語言識別的型別,都可以作為函式的返回值型別

如果函式具有返回值,返回的內容用return語句返回

return語句後面可以新增變數或者表示式

如果函式不具有返回值,return語句可以預設

有以下三種寫法:

1、 ->返回值型別  同時預設

2、寫成   ->()

3、寫成    ->Void

函式優點:

讓程式碼更具有模組化,提高程式碼的可讀性

讓程式碼更容易修改和維護

增強程式碼的複用性

無返回值,無引數函式

func printLine() -> String{

return “—————-”

}

print(printLine())

例子1:求取a + b的和,a = 10,b  = 20

func sumNumber(){

let a  = 10

let b = 20

print(a + b)

}

sumNumber() //呼叫函式

MARK

*函式只有在呼叫的時候才會為函式中的變數和常量分配空間

*函式如果一直沒有被呼叫,和沒有定義一樣,函式裡的變數或常量都不佔記憶體

*函式體重定義的常量和變數,生命週期從函式呼叫開始,到函式呼叫結束為止,作 用域只在函式體內

* 向例子1中定義的變數或者常量,我們稱為區域性變數或者區域性常量

*全域性變數的作用域,從定義位置開始,到下面的所有函式都能直接使用這個全部變數

帶引數,無返回值函式

函式的引數預設為隱式常量,在函式內部不能進行賦值操作,函式形參的作用只是用來接收呼叫函式時傳遞過來的數值

例子2:

func sumAAndB(a:Int,b:Int){

a + b

}

sumAAndB(10,b:20) //呼叫函式

例子3:判斷從鍵盤輸入的字元是否為十六進位制的合法字元

func isNum(b: String){

    if b.characters.count == 1{

        let b = b[b.startIndex]

        if b >= "0" && b <= "9" || b >= "a" && b <= "f" || b >= "A" && b <= "F"{

            print("這個數是十六進位制的字元")

        }else{

            print("這個數不是十六進位制的字元")

        }

    }else{

        print("不合法")

    }

}

isNum(“k”)

函式引數為多個不定項資料

如果函式引數個數不定,可以使用…格式來接收多個數據,相當於接收一個數組

引數位置不定資料的引數只能定義一個

不定資料放在所有引數後面定義

例子4:

func getMoreNumber(num:Int…){

for i in num{

print(i)

}

}

getMoreNumber(1,2,3) //呼叫函式

1

2

3 //列印結果

帶引數,有返回值函式

例子5:

func sayGoodBye(personName: String,isSay: Bool) ->String{

    if isSay{

        return "我們已經認識了"

    }else{

        return sayHello(personName)

        //函式遇到return語句就結束了,return後面的內容不會被執行

    }

}

print(sayGoodBye("Kil", isSay: false))

如果函式的返回值存在不確定值,那麼函式就要將返回值型別定義成可選型別:Int?返回值返回的為nil

例子6:

func divNum(a: Int,b: Int) -> Int?{

    if b != 0{

    return a / b

    }else{

        return nil

    }

}

print(divNum(4, b: 0))

函式內部實現改變函式外部引數的值

定義函式時的引數稱為形參,函式呼叫傳遞的引數,稱為實參,inout引數實現了形參的值能被修改的功能

例子7:交換兩個數的值

func swap(inout a: Int,inout b: Int){

    let tmp = a

    a = b

    b = tmp

}

var m = 10

var n = 30

swap(&m, b: &n)

print(m,n)

實參向形參傳遞數值,我們稱之為值傳遞,值傳遞是不能修改實參的值的

實參向形參傳遞地址,我們稱之為地址傳遞,地址傳遞可以修改實參的值

例子8:編寫一個函式,函式傳入一個無序的整形陣列,函式無返回值,函式的功能是講傳入的陣列實現從小到大排序

func sort(inout a: [Int]){

    a.sortInPlace()

}

var arr = [1,5,3,23,65,23,12]

sort(&arr)

print(arr)

外部引數與函式型別

func getPan(width: Int,height: Int) ->Int {

    return (width + height) * 2

}

print(getPan(10, height: 20))//此處的height就是隱式的外部引數,因為此處的外部引數和內部引數是同一個

內部引數就是離冒號近的引數名稱,用於參與函式內部運算

外部引數就是離冒號遠的引數名稱,用於函式呼叫時增強程式碼的可讀性,如:

func getArea( width: Int, height: Int)->Int {

    return  width * height

}

此處的寬、高就是外部引數

外部引數名稱預設

func personInfo(name: String, _ age: Int) ->String//用_ 代表外部引數預設

{

    return name + "\(age)"

}

print(personInfo("小明", 19))

引數帶有預設值

func shape(width: Int = 100) { 

    print(width * width)

}

函式的引數預設是隱式常量,在函式體內不能賦值,但是可以在定義引數的同時直接初始化

函式的過載

程式中定義多個同名函式,函式的返回值型別或者函式的引數列表不同,這種形式稱為函式過載

原函式:

func getStudentInfo(name: String) {    

    print(name)

}

函式過載1:函式名相同,引數列表不同

func getStudentInfo(name: String,age: Int) {

    print(name + "\(age)")

}

函式過載2:函式名相同,引數列表相同,函式返回值不同

func getStudentInfo(name: String) ->String {

    return name

}

相關推薦

7 函式——《Swift3.0入門出家

6 函式 函式就是對某個功能的封裝,一個swift程式可能由多個函式組成 swift中定義函式的格式: func 函式名稱(引數列表) —>函式返回值型別{ 函式體 return  }

2 分支語句——《Swift3.0 入門出家

2 分支語句  當程式面臨多個選擇,每一個選擇都會執行不同的程式碼塊,這個時候就要使用分支語句。常見的分支語句有: if 選擇語句:if... if…else if…elseif…else i

轉-Vue.js2.0入門到放棄---入門實例(一)

命令行 今天 初始化 手動 pre ref cnpm 簡單介紹 收藏 http://blog.csdn.net/u013182762/article/details/53021374 標簽: Vue.jsVue.js 2.0Vue.js入門實例Vue.js 2.0教

Spring4.0入門到精通視頻教程 - 1. Spring的特點

spring4.0從入門到精通視頻教程 java 第三方 開發 輕量級:Spring 是非侵入性的 - 基於 Spring 開發的應用中的對象可以不依賴於 Spring 的 API依賴註入(DI --- dependency injection、IOC)面向切面編程(AOP --- aspec

Spring4.0入門到精通視頻教程 - 2. 安裝SPRING TOOL SUITE

spring4.0從入門到精通視頻教程 spring tool suite 1、找到與eclipse版本配套的SPRING TOOL SUITE。http://spring.io/tools/sts/all2、Help -> Install New Software...3、Click Add.

Zabbix 3.0 入門到精通(zabbix使用詳解)

and eid ace inactive imm chmod 添加應用 zab tput 1.1 為什麽要監控   在需要的時刻,提前提醒我們服務器出問題了    當出問題之後,可以找到問題的根源    網站/服務器 的可用性 1.1.1 網站可用性  

【備忘】年薪50萬2017年最新Spark2.0入門到精通教程

Spark從入門到精通(Scala程式設計、案例實戰、高階特性、Spark核心原始碼剖析、Hadoop高階) 下載地址:http://www.javaxxz.com/thread-342081-1-1.html 本課程主要講解目前大資料領域最熱門、最火爆、最有前景的技術——

【備忘】2018年薪50萬2017年最新北風網Spark2.0入門到精通教程

Spark從入門到精通(Scala程式設計、案例實戰、高階特性、Spark核心原始碼剖析、Hadoop高階)官方出售價格:2250元,地址:http://www.ibeifeng.com/goods-560.html本課程主要講解目前大資料領域最熱門、最火爆、最有前景的技術

spark2.0入門到精通(一)

。RDD介紹 。Spark基本工作原理 。Spark開發入門               。編寫WorkCount程式               。使用本地模式進行測試               。使用spark-submit提交到叢集執行(spark-subm

【備忘】年薪50萬2018年最新北風網大資料Spark2.0入門到精通視訊教程

Spark從入門到精通(Scala程式設計、案例實戰、高階特性、Spark核心原始碼剖析、Hadoop高階)官方出售價格:2250元,地址:http://www.ibeifeng.com/goods-560.html本課程主要講解目前大資料領域最熱門、最火爆、最有前景的技術—

【視訊分享】Angular 4.0入門到實戰 打造股票管理網站

為了讓你更好的理解Angular的新特性,講師精心設計一個單頁應用(SPA)-股票管理網站,將A

Vue.js2.0入門到放棄---入門例項(三)

已經有幾周沒有更新部落格了,最近自己也在學習就沒有能及時抽身來寫部落格。 今天就來簡單說一下vue-resource,這是vue的一個與伺服器端通訊的HTTP外掛,用來從伺服器端請求資料。話不多說,直接上乾貨吧。 這裡PS一下,有人反映之前的程式碼下載下來,執行會報錯而

angular4、angular4.0入門到實戰 打造股票管理網站 1.子路由 2. 路由傳參三種方式 3. 路由守衛

可能有點語無倫次。。。。。因為第一次寫這麼長的博文~~~ 最近跳入了angular4的坑,之前看的angular權威教程是angularJS1.的版本,之後的angular2和angular4改動非常大,可以說是兩個框架了(雷鋒和雷峰塔),google公司只對

-Angular 4.0入門到實戰 打造線上競拍網站-

這個視訊資源應該是我目前看到的比較全面完整的關於angular的視訊,學習還是挺不錯的,下列是課程目錄列表:第1章準備好了嗎,那就開始吧!!!在這一章裡,我們首先會對整個課程的內容做一個簡要的介紹,包括章節的安排,實戰幸例的介紹以及前置知識的介紹等內容。然後我們會從一個比較高

npm的安裝及Vue.js2.0入門到放棄---入門例項(一)

下載地址:http://nodejs.cn/download/ https://nodejs.org/en/download/  兩者都可以安裝node.js從node.js官網下載並安裝node,安裝過程很簡單,一路“下一步”就可以了(傻瓜式安裝)。安裝完成之後,開啟命令列

spring 5.0 入門到放棄 01

國際慣例  helloWorld奉上 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch

0基礎自學《Python程式設計入門到實踐》章節7.1習題自測

7-1 汽車租賃:編寫一個程式,詢問使用者要租賃什麼樣的汽車,並列印一條訊息,如“Let me see if I can find you a Subaru"。 7-2 餐館訂位:編寫一個程式,詢問使用者有多少人用餐。如果超過8個人,就列印一條訊息,指出沒有空

MySQL5.7入門到精通-------儲存過程與儲存函式(2)

10.1.6  流程控制的使用         (1)IF語句的使用。 DROP PROCEDURE IF EXISTS testIf; DELIMITER // CREATE PROCEDURE

MySQL5.7入門到精通-------儲存過程與儲存函式(3)

10.2.1  呼叫儲存過程         儲存過程必須使用CALL語句來呼叫。如果要呼叫其它資料庫的儲存過程,需要指定資料庫名稱。例如 CALL dbname.spname DROP TABLE IF EXISTS t_student; CREATE TABLE t_

0基礎自學《Python程式設計入門到實踐》章節7.3習題自測

7-8 熟食店:建立一個名為sandwich_orders的列表,在其中包含各種三明治的名字;再建立一個名為finished_sandwiches的空列表。遍歷列表sandwich_orders,對於其中的每種三明治,都列印一條訊息,如I made your t