import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let s1 = myCode(s: "Before", x: 0)
let s2 = self.myCode2(s: "Before")
let s3 = self.myCode6()
let s4 = self.myCode6(first: 100, secon: "200")
}
// -> 右边是返回值类型, Any 任意类型
func myCode(s:String,x:Int) -> Any {
return (s,x) //返回一个元组
}
//多个返回值
func myCode3(s:String) -> (a:Int,c:String,b:Bool) {
return (0,"多个返回值",true)
}
//返回指定类型
func myCode2(s:String) -> String {
return s+"end" //返回一个字符串
}
//无参,无返回值
func myCode4() {
print(myCode2(s: "无参,无返回值"))
}
//无标签参数
func myCode5(_:Int,_:String) -> Any {
self.myCode7("省略标签")
return (1,"无标签参数")
}
//如果你不希望为某个参数添加一个标签,可以使用一个下划线(_)来代替一个明确的参数标签。
func myCode7(_ s:String) -> String {
return s
}
//带默认值参数,和C++的构造函数表达方式很像
func myCode6(first:Int = 10,secon:String = "带默认值参数") -> Any {
let total = myCode8(2,3,100,34)
return (first,secon)
}
//可变参数,接受0或多个值
func myCode8(_ numbers:Double...) -> Double {
var total:Double = 0
for number in numbers {
total += number
}
var a = total/Double(numbers.count)
var s = "作为引用变量"
myCode9(s: &s)
return total
}
//函数参数为引用变量
//默认情况下参数是常量不可变(否则报编译时错误) 和C++的引用变量相似
func myCode9(s: inout String) {
s = "作为引用变量,进入了函数"
}
//将函数定义为常量或变量,可以把函数传递给其它控制器
//
func myCode10(s:String)-> String {
var funcCode:(Int, Int) -> Int = addTwoInts //funcCode 变量 指向同类型的函数,结果返回一个Int型
let a = funcCode(2,3); //使用方法
return s
}
//实现方法
func addTwoInts(_ a: Int, _ b: Int) -> Int {
return a + b
}
//函数类型作为返回类型 (Int)->Int
func myCode11(b:Bool) -> (Int)->Int {
return b ? func1:func2
}
func myCode12(b:Bool) -> (_ funcxx:(Int))->Int {
return b ? func1:func2
}
func func1(a: Int) -> Int {
return a+1
}
func func2(b: Int) -> Int {
return b+2
}
//嵌套函数,在函数中声明和实现函数
func myCode13(b:Bool) -> (Int)->Int {
func inFunc1(a: Int) -> Int { return a+1 }
func inFunc2(b: Int) -> Int { return b+2 }
return b ? inFunc1:inFunc2
}
}