-
Swift #7 - 함수Swift의 온도 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 = arg1arg1 = arg2arg2 = temp}*호출 : &사용var value1 = 1var value2 = 2swapTwoValue(&value1, &value2)cs 3. 함수와 옵셔널
- 옵셔널
*함수 파라미터 옵셔널*반환 타입 옵셔널*옵셔널로 선언해야 nil 사용 가능func sayHello(who : String) {print("Hello \(who)")}sayHello(who: nil) // Errorcs - 옵셔널 반환 타입
#동작 결과로 옵셔널 타입의 값 반환
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 'Swift의 온도' 카테고리의 다른 글
Swift #9 - 객체 초기화 (0) 2021.01.14 Swift #8 - 클래스 (0) 2021.01.13 Swift #6 - nil과 옵셔널 (0) 2021.01.08 Swift #5 - 제어문 (0) 2021.01.07 Swift #4 - 다수의 데이터 다루기 (0) 2021.01.06