//파라미터O, 반환O
func sum(a: Int, b: Int) -> Int{
return a+b
}
//파라미터O, 반환X
func printMyName(name: String)->Void{
print(name)
}
//파라미터O, 반환X
func printMyName(name: String){
print(name)
}
//파라미터X, 반환O
func maximumIntegerValue() ->Int{
return Int.max
}
//파라미터X, 반환X
func hello() ->Void{print("hello")}
//파라미터X, 반환X
func bye() {print("bye)}
sum(a:3, b:5)
printMyName(name: "yagom")
printYourName(name: "hana")
maximumIntegerValue()
hello()
bye()
기본값을 가지는 매개변수는 가장 마지막에 적어주는 것이 좋다
func greeting (friend: String, me: String = "dora"){
print("Hello\(friend)! I'm\(me)")
}
greeting(friend : "john")
greeting(friend : "sara")
함수를 호출할 때, 매개변수의 역할을 좀 더 명확하게 하거나 함수 사용자의 입장에서 표현하고자 할 때 사용한다.
func greeting(to friend: String , from me : String){
print("Hello \(friend)! I'm\(me)")
}
greeting(to: "hana", from: "dora")
함수 중복 정의도 편리하게 할 수 있다. 전달인자 레이블까지 함수명으로 판단하기 때문에 greeting은 두 가지 함수로 인식된다.
전달 받을 값의 개수를 알기 어려울 때 사용한다.
가변 매개변수는 함수당 하나만 가질 수 있으며 맨 뒤에 위치하는 것이 좋다.
func sayHelloToFriends(me: String, friends: String...)
->String{
return "Hello\(friends)! I'm\(me)"
}
//전달인자가 여러 개여도 된다.
print(sayHelloToFriends(me: "dora", friends: "hana","sara","eric"))
//전달인자가 하나여도 된다
print(sayHelloToFriends(me: "dora"))
스위프트는 함수형 프로그래밍 패러다임을 포함하는 다중 패러다임 언어이다.
스위프트의 함수는 일급 객체이므로 변수, 상수 등에 저장이 가능하다.
//함수를 데이터타입으로 표현할 때에는 반환타입을 생략할 수 없다.
var someFunction: (String, String)-> Void = greeting(to:from:)
someFunction("eric","dora")
someFunction = greeting(friend:me:)
someFunction("eric","dora")
하지만 다른 타입의 함수를 또 할당할 수는 없다
someFunction = sayHelloToFriends(me: friends:) // 불가
함수 타입을 매개변수로 넘겨줄 수 있다.
func runAnother(function: (String, String)-> Void){
function("jenny", "mike")
}
runAnother(function: greeting(friend: me:))
runAnother(function: someFunction)
1,0으로 bool값을 대체할 수 없다.
if someInteger < 100{
print("100 미만")
}else if someInteger >100{
print("100 초과")
}else{
print("100")
}
범위 연산자를 사용할 수 있다.
switch someInteger{
case 0:
print("zero")
case 1..<100:
print("1~99")
case 100:
print("100")
case 101...Int.max:
print("over 100")
default:
print("unknown")
}
정수 외의 대부분의 기본 타입을 조건에 활용할 수 있다.
default구문을 무조건 써줘야 한다.
switch "dora":
case "dora":
print("dora")
case "sarah":
print("sarah")
default:
print("unknown")
case구문 안에 break를 명시적으로 적어주지 않아도 된다. fallthrough
switch "dora":
case "dora":
print("dora")
fallthrough
case "sarah":
print("sarah")
default:
print("unknown")
다른 언어들의 foreach문과 비슷하다.
var integers = [1,2,3]
let people = ["dora": 10, "eric" : 15, "mike": 12]
for integer in integers{
print(integer)
}
for(name, age) in people{
print("\(name): \(age)")
}
while integers.count >1 {
integers.removelast()
}
기존의 do-while문과 비슷하다.
do라는 키워드가 swift의 오류 처리 구문에서 쓰이기 때문에 쓰이지 않는다.
repeat{
integers.removeLast()
}while integers.count > 0