回傳值亦為String(->表示回傳值型態), func是關鍵字
func helloWorld(message : String) ->String { return "\(message) Hello World" }
//function call var result1 = helloWorld("Eric")
回傳值為"Eric Hello World",\(變數名稱) 是用來做pattern String
2.以下是一個沒有回傳值的function
func printData(message:String) { print(message) } printData("北七BLOG")
會印出北七BLOG,但不會回傳值。
3.多個參數的function
func helloWorl (message : String , who : String ) ->String { return "\(who) say ... \(message)" } var result2 = helloWorl("你好", "bill")
輸出為 "bill say ... 你好"
4.多個回傳值的function
func comsitInformation(who : String , salary : Int , address : String ) ->(who : String ,salary : Int ,address : String ) { var whoMsg = who + "你好" var curSalary = salary + 10000 var result = (whoMsg,curSalary,address) return result } var result = comsitInformation("boy" , 100 , "高雄市前鎮區") print(result.who)
輸出為"boy你好" ,它的會回傳是一個具名元組,可以用名稱取得內容。
EX: result.who、 result.salary、 result.address
5.function 亦支援overLoading
可以允許同名的function但參數型別、數量不同。
func helloWorld(message : String) ->String { return "\(message) Hello World" } //overLoading func helloWorld (message : String , who : String ) ->String { return "\(who) say ... \(message)" } //function call var result1 = helloWorld("Eric") //call stong Typed function paramters var result2 = helloWorld("你好", "bill")
6.變動參數長度,和JAVA的AsyncTask 輸入參數類似
func calc(values : Int...)->Int { var myTOtal : Int = 0 //走訪 print("total:\(values.count)") for value in values { myTOtal += value } return myTOtal } var result3 = calc(10,20,55,55) var result3 = calc(16,22)
7.function的參數預設的情況下是常數,不允許變更自身的值
//預設是常數,要改值要改成變數 func passingPocess(var #v1 : Int32 ,var #v2 :Int32) { v1 = v1 * 100 v2 = v2 * 100 print("new value: v1:\(v1) v2:\(v2)") } var lvar1 : Int32 = 100 var lvar2 : Int32 = 200 passingPocess(v1 : lvar1 , v2 : lvar2)
如果你需要提供外部參數名,但是局部參數名已經定義好了,那麼你不需要寫兩次這些參數名。相反,只寫一次參數名,並用
井字號(#)
作為前綴就可以了。這告訴 Swift 使用這個參數名作為局部和外部參數名。8.傳址參數
func passingPocess(inout #v1 : Int32 ,inout #v2 :Int32) { v1 = v1 * 100 v2 = v2 * 100 } passingPocess(v1 : &lvar1 , v2 : &lvar2) //call by referece inout print("old value: lvar1:\(lvar1) lvar2:\(lvar2)")
9.定義函數型別(function當作一個Type)
func calc(values : Int...)->Int { var myTOtal : Int = 0 //走訪 print("total:\(values.count)") for value in values { myTOtal += value } return myTOtal } var calProxy :(Int...) -> Int = calc var returntotal = calProxy(1,2,3,4,5)
calProxy即為我們定義的函數型別
亦可寫的更加精簡
//不寫參數也可以 var calProxy2 = calc var returntotal2 = calProxy2(1,2,3,4,5)
10.函式當成參數傳遞
func addTwoInts(a: Int, b: Int) -> Int { return a + b } var mathFunction: (Int, Int) -> Int = addTwoInts func printMathResult(mathFunction: (Int, Int) -> Int, a: Int, b: Int) { println("Result: \(mathFunction(a, b))") } printMathResult(addTwoInts, 3, 5) // prints "Result: 8」
參考來源:
http://tommy60703.gitbooks.io/swift-language-traditional-chinese/content/chapter2/06_Functions.html
沒有留言:
張貼留言