Swift第三天
一.函数
定义一个函数, 函数名叫sayHello, 参数为:personName, 类型是String, 返回值为一个字符串
func sayHello(personName:String)->String{ return "My name is " + personName } println(sayHello("Chris"))
多参有返回值的函数
func mathPlus(firstNum:NSInteger, secondNum:NSInteger)->NSInteger{ return firstNum + secondNum } println(mathPlus(1,3))
无参数有返回值的函数, 需要注意的是有返回值的函数也可以忽略掉返回值的, 可以不去接收就可以了
func sayHelloAgain()->NSString{ return "Hello again!" } println(sayHelloAgain()) sayHelloAgain()
有参无返回值的函数
func sayHello1(firstName:NSString){ println("\(firstName) say Hello") } sayHello1("Chris")
多返回值的函数, 感觉这个函数看着好别扭, 感觉这个返回值就像是OC中的返回一个字典一样, 同样的参数是可以不要的
func funcTest(testString:String)->(firstName:String, lastName:String, team:String){ return ("Chris", "Paul", "LAC") } let paul = funcTest("paul") println(paul.firstName)
问题来了, 这样创建的函数没有了之前OC里常用的外部参数名了,也就是说我们只知道他需要一个字符串, 却不知道这个参数是干嘛的了.这就涉及到外部参数和局部参数了
func doTest(userName firstName:String, userTeam team:String)->String{ return firstName + " is " + team }//这里的外部参数其实就是我们可以在调用函数看到的 println(doTest(userName: "Chris", userTeam: "LAC"))
如果嫌麻烦, 就在参数前面加一个#,这样系统就会默认局部参数名和外部参数名都是这一个了
func testFunc(#firstName:String)->String{ return "My name is " + firstName } println(testFunc(firstName: "Chris"))
初始化参数, 可以在函数定义的时候就给参数赋上值, 这样在调用函数的时候, 就可以不指定该参数, 但问题是不提示啊, 感觉Swift中好多东西都不会提示, 好烦人
func join(string s1: String, toString s2: String, withJoiner joiner: String = " ") -> String { return s1 + joiner + s2 } println(join(string: "Chris", toString: "Paul"))
给参数赋初值后, 系统会默认给它添加外部参数名, 跟#是一样的效果
func join1(s1:String, joiner:String = " ",s2:String)->String{ return s1 + joiner + s2 } println(join1("Chris", joiner: "_", "Paul"))
可变参数的情况, 用...
func makePlus(numbers:NSInteger...)->NSInteger{ var sum:NSInteger = 0 for num in numbers{ sum += num } return sum } makePlus(1,2,3,4)//这里的参数需要删除最后的...,不然不会走函数
参数是可变类型的, 这样就可以根据自己需要的去传入参数了
func makeTest(var #str:String)->String{ return str } let s = "test" makeTest(str: s);)//这里不知道为什么会需要一个分号, 也是醉了
输入输出参数, 意味把该参数做完处理之后, 输出该参数
func swapTwoInts(inout a: Int, inout b: Int) { var x = a a = b b = x }//该函数把a,b互换 var someInt = 3 var anotherInt = 6 swapTwoInts(&someInt, &anotherInt) println(someInt) println(anotherInt)
结语
函数这一块, 其实还是挺好理解的, 就是一些语法习惯不一样, 以后用的多了估计就慢慢习惯了.--CP