Swift3之函式(一)

2021-08-02 16:20:12 字數 4342 閱讀 5990

學習步驟:

函式概述

常量引數,變數引數, i/o 引數

1.函式 -- 常量引數

2.函式 -- 變數引數(swift3.0已廢棄)

3.函式 -- i/o 引數

引數個數的從0到多

1.函式 -- 不帶引數

2.函式 -- 帶引數

3.可變引數

返回值個數的從0到多

1.沒有返回值函式

2.乙個返回值

3.多個返回值 -- 元組

一.先來了解一下函式:

swift 定義函式使用關鍵字func

定義函式的時候,可以指定乙個或多個輸入引數和乙個返回值型別。

每個函式都有乙個函式名來描述它的功能。通過函式名以及對應型別的引數值來呼叫這個函式。函式的引數傳遞的順序必須與引數列表相同。

函式的實參傳遞的順序必須與形參列表相同,->後定義函式的返回值型別。

func funcname(形參) -> 返回值型別

//———————————

形參可以沒有,但是()必須有

返回值可以沒有,沒有返回值時 ->也沒有

如:func test()

所以我們從形參(函式引數)返回值兩部分來了解函式,至於實現部分則是功能模組,根據需要補充就行。

1.函式 – 常量引數

預設在函式中定義的引數都是常量引數,也就是這個引數你只可以查詢使用,不能改變它的值。

func 函式名( 引數變數:型別 ,引數變數:型別…){}

說明:

1: func 是函式關鍵字

2:{} 函式體

3: 引數變數是預設常量型別,不能在函式函式體裡面直接修改

/*

測試引數變數的預設型別

*/func changeparam(value : int) -> int

var test = 10;

let a = changeparam(value:test);

---------------------

以上**會報錯,終端列印的錯誤資訊是:

left side of mutating operator isn't mutable: '

value

' is a '

let' constant

value += 1;

也就是說value 是 let 常量

2.函式 – 變數引數(swift3.0已廢棄)

過去可以在引數前加關鍵字 var 將其定義為變數,這樣函式內部就可以對該引數進行修改(外部的引數任然不會被修改)。

現在這種做法已經被廢棄❌,swift 3 不再允許開發者這樣來將引數標記為變數了。

func 函式名(var 引數變數 : 型別,… ) {}

說明

1: func 函式關鍵字

2: var 引數變數 :型別 表示引數變數是可變變數,不是常量,可以修改

❌ 現在已經不可用,寫出來是為了學習過swift2的同學知道

現在只能用乙個var變數接收常量引數來實現變數引數的功能了

func changeparam( value : int) -> int

3.函式 – i/o 引數

i/o引數又叫輸入輸出引數,它傳入的引數是乙個引用,在函式內部修改

了i/o引數,對應的外部引數也會發生改變。

當傳入的引數作為輸入輸出引數時,需要在引數名前加 & 符,表示這個值可以被函式修改。

* 因為i/o引數和外部變數指向同一記憶體位址,修改的是同一記憶體的資料,所以內外同時改變。

*一般預設的引數傳遞都是傳值呼叫(傳入的只是這個引數的副本),而不是傳引用。

func 函式名(引數: inout 型別)

var arr = [1

,2,3

,4,5];

func testioparam(dataarray: inout [int])

}testioparam(dataarray: &arr);//傳入的是arr對應的位址 &為取位址符

print(arr);

輸出結果為

[2, 3, 4, 5]

函式可以接受乙個或者多個引數,這些引數被包含在函式的括號之中,以逗號分隔。

func 函式名(引數1:型別 ,引數2:型別,引數3:型別)

1.函式 – 不帶引數

func 函式名() -> 返回值型別

func test()

2.函式 – 帶引數
func 函式名(引數1:型別 ,引數2:型別 ,引數3:型別) -> 返回值型別

引數個數根據需要而定

func add(a: int, b: int) -> int

print(add(a: 10, b: 5));

3.可變引數

可變引數可以接受零個或多個值。函式呼叫時,你可以用可變引數來指定函式引數,其數量是不確定的。

可變引數通過在變數型別名後面加入...的方式來定義。

func add(numbers: int...) -> int

return totle;

}print(add(numbers: 1,2,3,4,5));//呼叫時多個引數用 , 隔開

1.沒有返回值函式
/*

知道即可,主要是用於閉包,在閱讀第三方框架**時保證可以看懂即可。

1. 省略返回值 這種最常用。

2. 返回 ()

3. 返回 void

這三種形式在內都不能使用return返回資料,否則會報錯

*///情況一

func 函式名(引數)

//情況二

func 函式名(引數) -> ()

//情況三

func 函式名(引數) -> void

func test1()

func test2() ->()

func test3() -> void

2.乙個返回值
func 函式名(形參)-> 返回值型別

func add(a: int, b: int) -> int

print(add(a: 10, b: 5));

3.多個返回值 – 元組

多個返回值(大於1個)並不是用多個->實現返回,而是使用元組的形式。

不了解元組的同學可以看下這篇文章swift元組

//舉例而已,不要在意函式有沒有意義��

func address(province:string ,city:string)->(province:string ,city:string)

var addr = address(province: "河南", city: "鄭州")

print("省:\(addr.province),市:\(addr.city)")

返回值是元組的話,可以根據元組的不同宣告方式來改變函式如

func address(province:string ,city:string)->(string ,string)

var (addr1,addr2) = address(province: "河南", city: "鄭州")

print("省:\(addr1),市:\(addr2)")

自己研究元組吧,我就不墨跡了。

到這裡大家看懂一般的函式已經沒問題了,但是呢,總有一些意外情況,讓學了以上部分的你感覺不知所措。學海無涯,我們接著來

swift3之函式csdn位址(二)

Swift3廢除特性(一)

正式版的swift 3.0將隨著ios 10和macos sierra正式版在去年 2016年 秋季推出,但由 於swift開源的特性,使得我們能夠看到swift的開發進展。swift3.1已於今年春季退出,swift4.0將於今年秋季推出。先來回顧一下swift 3廢除的一些特性 1.棄用 與 操...

Swift3新增特性(一)

swift3 不僅移除了swift2中的部分特性,同時也增加了自己的新特性 1 內聯序列函式 sequence swift 3新增了兩個全域性函式 sequence first next 和sequence state next 使用它們可 以返回乙個無限序列 下面是乙個簡單的使用樣例 從某乙個樹節...

Swift 3 建構函式 過載建構函式

viewcontroller.swift import uikit class viewcontroller uiviewcontroller person.swift 建構函式 分配記憶體空間 設定初始值 在swift中 所有的構造方法 都是init 建構函式的責任就是 一定構造乙個物件出來 過載...