Swift의 온도
Swift #7 - 함수
IT의 온도
2021. 1. 12. 03:02
1. 함수 정의와 사용
- 애플리케이션의 동작
#동작의 기본 단위 : 함수
- 함수 작성
#func 키워드로 정의
#함수의 리턴 타입
#함수 이름
#함수 파라피터
#함수 정의
*파라미터, 리턴 값이 없는 함수
func greeting() {
print("Hello Swift")
}
*사용
greeting()
|
cs |
#함수의 실행 결과
* ->로 결과 타입 작성
*반환 타입이 없으면 (Void) - 생략 가능
func greeting() -> Void {
}
*반환 타입과 같은 타입의 값 반환
func areYouOK -> Bool {
return true
}
func favoriteDrink() -> String {
return "Coffee"
}
|
cs |
- 함수 반환값
#다수의 값 반환 : 튜플
*튜플 반환 함수 정의
func random3() -> (Int, Int, Int) {
let r1 = Int(arc4random() % 10)
let r2 = Int(arc4random() % 10)
let r3 = Int(arc4random() % 10)
return (r1, r2, r3)
}
*사용
var (num1, num2, num3) = random3()
print("Random1 : \(num1) Random2 : \(num2) Random3 : \(num3)")
|
cs |
2. 함수 파라미터
- 함수 파라미터
#파라미터가 있는 함수
*파라미터 1개
func greeting(person:String) {
print("Hello" + person)
}
*파라미터 2개
func greeting(person: String, emotion: String) {
print("Hello" + person + "with" + emotion)
}
|
cs |
- 파라미터 이름
#내부 파라미터 이름
*함수 내부에서 접근, 사용
*함수 외부에서 접근/사용 불가
func greeting(person: String) {
print("Hello" + person)
}
|
cs |
#외부 파라미터 이름
*함수 외부(함수 호출)에서 사용
*함수 내부에서 접근 불가
*내부 파라미터 이름으로 자동 적용
func greeting(person: String) {
print("Hello" + person)
}
greeting(person:"My Friend")
*파라미터가 2개인 함수 호출
greeting(person:"My Friend", emotion:"Smile")
|
cs |
*수동으로 설정하기 - 파라미터 앞에 선언
*별도로 설정하지 않으면 - 내부 파라미터 이름과 동일
func greeting(who person : String) {
print("Hello" + person)
}
greeting(who: "Swift")
func greeting(person:String. with emotion: String) {
print("Hello" + person + "with" + emotion)
}
greeting(person: "My Friend, with: "Hug")
|
cs |
- 외부 파라미터 이름 사용 생략
*_기호 사용
func greeting(_person: String) {
print("Hello" + person)
}
greeting("Friend")
func greeting(person: String, _emotion: String) {
print("Hello" + person + "with" + emotion)
}
greeting(person: "Swift", "Passion")
|
cs |
- 오버로딩
*같은 함수 이름, 다른 파라미터 타입
func sayHello(msg : String) {
print("sayHello(msg:)")
}
*다른 외부 파라미터 이름
func sayHello(_msg : String) {
print("sayHello(_:)")
}
*다른 파라미터 타입
func sayHello(_times : Int) {
print("sayHello(_:)")
}
|
cs |
- 파라미터 기본값
* =기호와 함께 기본값 설정
* 호출 시 생략 가능
func greeting(person : String = "Friend") {
print("Hello \(person)")
}
greeting(person: "Mom")
greeting()
* 혼동 주의
greeting(whom: "World")
* 어느 메소드가 실행되는가?
func greeting(whom person : String) {
print("Hello" + peroson)
}
func greeting(whom person : String. emotion : String = "Happy") {
print("Hello" + person + "with" + emotion)
}
|
cs |
- 가변 길이 파라미터
*개수가 정해지지 않은 다수의 파라미터
*타입에 '...' 사용
*함수 파라미터에 하나만 사용 가능
*함수 내부에서 배열로 사용
func addAll(_values : Int) -> Int {
print(values.count)
for v in values {
print(v)
}
}
*호출
addAll(1, 2, 3)
|
cs |
- inout 파라미터
#파라미터 상수
*파라미터 : 함수 내부에서는 상수로 사용
*파라미터 변경 시도 시 에러
func tryParameterChange(_arg : Int) {
arg = arg +1 //Error
}
|
cs |
#파라미터 값 변경하기 : inout 선언
*파라미터 타입 앞에 inout 작성
*두 값을 바꾸기(swap) 예
func swapTwoValue(_ arg1 : inout Int, _ arg2 : inout Int) {
let temp = arg1
arg1 = arg2
arg2 = temp
}
*호출 : &사용
var value1 = 1
var value2 = 2
swapTwoValue(&value1, &value2)
|
cs |
3. 함수와 옵셔널
- 옵셔널
*함수 파라미터 옵셔널
*반환 타입 옵셔널
*옵셔널로 선언해야 nil 사용 가능
func sayHello(who : String) {
print("Hello \(who)")
}
sayHello(who: nil) // Error
|
cs |
- 옵셔널 반환 타입
#동작 결과로 옵셔널 타입의 값 반환
func nilReturnFunction() -> Int? {
return nil
}
*ret의 타입은?
let ret = nilReturnFunction()
*옵셔널 바인딩과 사용
if let ret = nilReturnFunction() {
print("실행 결과 : \(ret)")
}
|
cs |
- 옵셔널 타입의 파라미터
*호출 시 : 파라미터에 nil 대입 가능
let ret2 = append(str: "Welcome", num: nil)
*함수 구현 시 : nil 검사 필요
func append(str: String, num val: Int?) -> String {
guard let str2 = val else {
return str
}
return str + String(str2)
}
|
cs |
#강제 언래핑 사용
*nil반환 함수 호출 시
func nilReturnFunction() -> Int? {
return nil
}
let ret : Bool = nilReturnFunction()!
|
cs |
- 함수 내 함수
#함수 내부에 함수 정의
*함수 외부에서 사용 불가
func outerFunc() {
func innerFunc() {
print("Inner Function works")
}
print("Outer Function works")
innerFunc()
}
outerFunc()
innerFunc() // 외부에서 호출 불가
|
cs |