7 函式——《Swift3.0從入門到出家
函式就是對某個功能的封裝,一個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